我正在使用用于 gridfs 的 java MongoDB 驱动程序,并且想在保存文件之前使用 MD5 哈希来检查文件是否已经存在。本质上,我试图在 Java中做到这一点。
我从 apache common-codec 尝试DigestUtils
了以下逻辑:
public GridFSDBFile save(InputStream inputStream, String contentType, String filename) throws IOException {
String md5 = DigestUtils.md5Hex(inputStream);
List<GridFSDBFile> md5match = gridFs.find(new BasicDBObject("md5", md5));
if (md5match!=null && md5match.size()>0) {
return md5match.get(0);
} else {
GridFSInputFile input = gridFs.createFile(inputStream, filename, true);
input.save();
return gridFs.findOne(input.getId())
}
}
查看底层实现,DigestUtils
MongoDB 驱动程序都使用 MessageDigest.getInstance("MD5") 来计算 MD5 哈希。但是,看起来 生成的 md5 哈希码DigestUtils
与 gridfs 生成的不一样。覆盖 GridFSInputFile 中的“md5”键也不起作用。