2012-06-26 81 views
2

我正在爲gridfs使用java MongoDB驅動程序,並希望在保存之前使用MD5哈希來檢查文件是否已經存在。基本上我正在嘗試在Java中執行this如何在保存到gridfs之前計算文件的MD5

我試圖DigestUtils從apache的共編解碼器以下邏輯:

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」鍵也不起作用。

回答

3

答案結果與Mongodb驅動程序無關。爲了計算md5散列,DigestUtils必須讀取InputStream。爲了使上述代碼正常工作,請使用標記/重置:

inputStream.mark(Integer.MAX_VALUE); 
String md5 = DigestUtils.md5Hex(inputStream); 
inputStream.reset(); 
相關問題