美文网首页
content-md5

content-md5

作者: 千纸鹤的祈祷 | 来源:发表于2020-02-20 13:03 被阅读0次
在使用阿里云oss的时候,指定content-md5进行文件流校验
那么怎么获取?
File pdfFile = new File("/Users/chongchuanbing/Downloads/19E06F28-3AE3-4E18-919F-AC1DA55FDFE8.png");
FileInputStream fileInputStream = new FileInputStream(pdfFile);

byte[] bytes = IOUtils.toByteArray(fileInputStream);

ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
MessageDigest md = MessageDigest.getInstance(MessageDigestAlgorithms.MD5);
byte[] b = md.digest(IOUtils.toByteArray(byteArrayInputStream));
String contextMd5 = Base64.encodeBase64String(b);
System.err.println("content-md5 first: " + contextMd5);

System.err.println("content-md5 second: " + BinaryUtil.toBase64String(DigestUtils.md5(bytes)));

System.err.println("content-md5 third: " + BinaryUtil.toBase64String(DigestUtils.md5(new ByteArrayInputStream(bytes))));

MultipartFile multipartFile = new MockMultipartFile(pdfFile.getName(), pdfFile.getName(),
        ContentType.APPLICATION_OCTET_STREAM.toString(), new ByteArrayInputStream(bytes));

String contentMd5 = BinaryUtil.toBase64String(DigestUtils.md5(multipartFile.getInputStream()));
System.err.println("content-md5 four: " + contentMd5);

MockMultipartFile.getInputStream 源码如下

public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(this.content);
    }

结论:

  • InputStream 转化为byte之后,内部index发生改变,上传有问题
  • MockMultipartFile内部存储的是byte,使用时转成ByteArrayInputStream,使用没有问题

参考文章
HTTP Content-MD5 首部字段:编码的坑

相关文章

  • content-md5

    在使用阿里云oss的时候,指定content-md5进行文件流校验 那么怎么获取? MockMultipartFi...

  • python字典操作get()

    在阿里云OSS API用户身份验证的时候,需要按照提供的算法对参数进行验证 其中Content-MD5和Conte...

网友评论

      本文标题:content-md5

      本文链接:https://www.haomeiwen.com/subject/arqxqhtx.html