PDF文件内容校验功能

1、将上传的文件生成一个key(文件指纹):将文件内容生成一个指纹

  <!--pdf文件校验-->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.24</version>
        </dependency>
        <!-- Apache Commons Codec for SHA-256 hash -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.15</version>
        </dependency>

工具类:

public static String GenerateFileFinger(File file) throws IOException, NoSuchAlgorithmException {  //用于生成文件指纹
        byte[] fileBytes = Files.readAllBytes(file.toPath());

        // Create a MessageDigest instance for SHA-256
        MessageDigest sha256Digest = MessageDigest.getInstance("SHA-256");

        // Calculate the SHA-256 hash
        byte[] hashBytes = sha256Digest.digest(fileBytes);

        // Convert the hash bytes to hexadecimal
        return DatatypeConverter.printHexBinary(hashBytes).toLowerCase();
    }

 将返回一个加密后的64位的加密字符串

由于前端传文件到后端会发生很多问题,比如说网络不稳定,数据乱码等会导致生成的指纹不一样,所以在前端同样生成这样的字符串在后端库里面进行匹配,如果有相同的就说明文件没有被更改过,否则就是被更改过,文件内容失效。

前端代码

import SHA256 from "crypto-js/sha256";
import WordArray from "crypto-js/lib-typedarrays"; // convert ArrayBuffer to WordArray


method:

 handleFileUpload() {
      const file = this.file;

      if (file) {
        const reader = new FileReader();

        reader.onload = (e) => {
          const arrayBuffer = e.target.result;
          const wordArray = WordArray.create(arrayBuffer);
          const hash = SHA256(wordArray).toString();

          // Set the file hash to the fileCode data property
          this.fileCode = hash;
        };

        reader.readAsArrayBuffer(file);
      }
    },

这里前端需要下载相关的包 npm install crypto-js

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件名称校验通常涉及到验证用户输入或从系统中读取的文件名是否符合特定的规则,例如是否包含特殊字符、正确的大小写、长度限制等。编写测试用例是为了确保这个功能的正确性和鲁棒性。以下是一些测试用例的例子: 1. **正常情况**: - 测试用例1: 验证一个合法的文件名,如 "example.txt" 或 "report_2023.pdf"。 - 测试用例2: 文件名仅包含字母、数字和下划线。 2. **边缘情况**: - 测试用例3: 文件名为空字符串或仅包含空格。 - 测试用例4: 文件名包含不允许的字符,如路径分隔符(/)或操作系统特定的特殊字符(如*、?)。 - 测试用例5: 文件名超出了预设的最大长度限制。 3. **错误情况**: - 测试用例6: 文件名以"."(点)开头,许多系统不允许这样命名。 - 测试用例7: 文件名包含连续的点或多个点分隔符,如".example.txt" 或 "example..txt"。 - 测试用例8: 文件名包含了非法的控制字符或特殊编码字符。 4. **边界条件**: - 测试用例9: 文件名的长度正好等于最小或最大允许长度。 - 测试用例10: 文件名包含大小写字母,检查是否区分大小写(如果设置为不区分则应接受小写形式)。 5. **异常处理**: - 测试用例11: 输入非字符串类型的数据,如数字或布尔值,看程序是否能适当地捕获并报错。 记得在每个测试用例后验证校验函数的输出(如返回值、错误消息等),以及实际操作(如文件创建、打开、删除)是否按预期执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值