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);

经验证,两种方式加密的结果一样。
Java判断上传文件是否重复_第1张图片

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


------------本文结束感谢您的阅读------------

你可能感兴趣的:(重复轮子)