springmvc文件上传时,校验文件md5的问题

最近在使用阿里云的oss存储服务,上传文件后会传回文件的md5值,后台采用springmvc,遂下载md5工具类一个,发现校验都是采用java.io.File作为参数传入,而springmvc采用common-fileupload上传时返回的是org.springframework.web.multipart.MultipartFile,解决方案如下文:

最初是使用将MultipartFile.getgetInputStream()强制转换为FileInputStream传入工具类,果然成功了,但是后来发现了问题,在上传小文件的时候强制类型转换报错,说不能将ByteArrayInputStream 强制转换为FileInputStream,遂查看common-fileupload的官方文档以及源码,发现DiskFileItemFactory类中有一个方法为setSizeThreshold,注释为“存储在内存中的最大size”,不用想也知道了,springmvc肯定设定了这个值,具体是多少笔者没有深究。

遂采用如下方案解决:

public String test(MultipartFile upload) throws Exception {
    byte[] uploadBytes = upload.getBytes();
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    byte[] digest = md5.digest(uploadBytes);
    String hashString = new BigInteger(1, digest).toString(16);
    return hashString.toUpperCase();
}

3 条评论

阳光xiao驴

确实,并且我估计处理大文件会有问题,当时主要是为了上传小图片用的,没有那么大的业务量。就用了这种方式。现在已经不用阿里云的oss了[嘻嘻]

回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

😉😐😡😈🙂😯🙁🙄😛😳😮:mrgreen:😆💡😀👿😥😎😕

验证码 *