文件的MD5值也就相当于一个文件的唯一标识,具有唯一性。
每个文件都有一个唯一的MD5值。
所以这里考虑,用户上传一个文件的时候,我们首先会或许这个上传文件的MD5值,再匹配之前上传的文件的MD5值,如果已经有人上传了这同一个文件,那么我们就把之前上传的文件地址取出,并且加一个映射到这个新文件的路径,而不必确实把这个新上传的文件保存到本地。
这样可能会比较有益于控制服务器端磁盘的占用。
这里在网络上找了一个JAVA获取文件MD5值的工具,源代码贴出来,留着备用:
==========================
package cdm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import org.apache.commons.codec.digest.*;
import org.apache.commons.io.IOUtils;
public class testMD5 {
public static String getMd5ByFile(File file) throws FileNotFoundException {
String value = null;
FileInputStream in = new FileInputStream(file);
try {
MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(byteBuffer);
BigInteger bi = new BigInteger(1, md5.digest());
value = bi.toString(16);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return value;
}
public static void main(String[] args) throws IOException {
String path="E:\\commons-codec-1.9-bin.zip";
String v = getMd5ByFile(new File(path));
System.out.println("MD5:"+v.toUpperCase());
FileInputStream fis= new FileInputStream(path);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("MD5:"+md5);
//System.out.println("MD5:"+DigestUtils.md5Hex("WANGQIUYUN"));
}
}
=============================
这个工具需要依赖
org.apache.commons.codec.digest这个包可以在
http://commons.apache.org/proper/commons-codec/download_codec.cgi
下载到。