如何在保存到 gridfs 之前计算文件的 MD5



我正在使用java MongoDB驱动程序进行gridfs,并希望使用MD5哈希在保存文件之前检查文件是否已存在。本质上,我正在尝试在 Java 中执行此操作。

我尝试使用以下逻辑从 apache 通用编解码器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哈希。但是,看起来DigestUtils生成的 md5 哈希代码与 gridfs 生成的代码不同。 覆盖 GridFSInputFile 中的"md5"键也不起作用。

答案原来与Mongodb驱动程序无关。 为了计算 md5 哈希,DigestUtils 必须通读 InputStream。 为了使上述代码正常工作,请使用标记/重置:

inputStream.mark(Integer.MAX_VALUE);
String md5 = DigestUtils.md5Hex(inputStream);
inputStream.reset();

最新更新