3

gridfs用のjavaMongoDBドライバーを使用しており、保存する前にMD5ハッシュを使用してファイルが既に存在するかどうかを確認したいと思います。基本的に、私はこれをJavaで実行しようとしています。

DigestUtils次のロジックを使用して、apachecommon-codecから試してみました。

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ドライバーとMongoDBドライバーの両方がMessageDigest.getInstance( "MD5")を使用してMD5ハッシュを計算しています。ただし、によって生成されたmd5ハッシュコードはDigestUtils、gridfsが生成したものと同じではないようです。GridFSInputFileの「md5」キーの上書きも機能しません。

4

1 に答える 1

3

答えは、Mongodbドライバーとは何の関係もないことがわかりました。md5ハッシュを計算するには、DigestUtilsがInputStreamを読み取る必要があります。上記のコードが正しく機能するためには、マーク/リセットを使用します。

inputStream.mark(Integer.MAX_VALUE);
String md5 = DigestUtils.md5Hex(inputStream);
inputStream.reset();
于 2012-06-26T19:14:57.933 に答える