Java判断上传文件是否重复

近期的项目中接到一个需求,文件上传时,如果是重复文件,直接将文件路径复制一份,不去真的上传。

背景:
文件服务器选择的是Fastdfs,数据库中有一个对应的File表保存文件存储路径以及MD5值。

思路:
要判断文件是否重复,就需要对每次上传的文件计算MD5值,上传前通过查询文件库中是否存在该MD5值,来判断是选择上传还是直接复制已存在的文件路径。

方法一:
使用org.apache.commons.codec.digest.DigestUtils类,一行代码搞定。

// 获取上传文件的MD5值
String md5 = DigestUtils.md5Hex(file.getBytes());
// 判断该文件是否在文件服务器上存在
List<String> filepathList = fileService.FileMd5IsExit(md5);
// 存放文件路径
String path = null;
if (CollectionUtils.isNotEmpty(filepathList)) {
	path = filepathList.get(0);
} else {
	// 文件上传
	path = fileStore.saveFile(file.getBytes(), extension);
}              

方法二:
java.security.MessageDigest java自带的加密类

// 获取上传文件的MD5值
InputStream inputStream = file.getInputStream();
byte[] buffer = new byte[1024];
int length = -1;
while ((length = inputStream.read(buffer, 0, 1024)) > 0) {
	messageDigest.update(buffer, 0, length);
 }
inputStream.close();
String md52 =  new BigInteger(1, messageDigest.digest()).toString(16);

经验证,两种方式加密的结果一样。
md5加密

总结:
两种方案均可以实现需求,我个人倾向于选择方案一,简单。


------------本文结束感谢您的阅读------------
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值