在Java环境中检测重复上载文件的最佳方法?

作为基于Java的Web应用程序的一部分,我将接受上传的.xls和.csv(以及可能的其他类型)文件。 每个文件都将使用参数和时间戳的组合进行唯一重命名。

我希望能够识别任何重复的文件。 副本我的意思是,完全相同的文件,无论名称。 理想情况下,我希望能够在上传后尽快检测到重复项,以便服务器可以在响应中包含此信息。 (如果按文件大小处理时间不会造成太多延迟。)

我已经阅读过关于在文件上运行MD5并将结果存储为唯一键等的内容…… 但我怀疑有更好的方法。 (有没有更好的办法?)

关于如何最好地接近这一点的任何建议表示赞赏。

谢谢。

更新:我对使用MD5一无所知。 我过去曾用过Perl( Digest :: MD5 )几次。 我认为在Java世界中,可能会出现另一种( 更好的 )解决方案。 但是,看起来我错了。

谢谢大家的回答和评论。 我现在对使用MD5感觉非常好。

处理上传的文件时,使用DigestOutputStream修饰OutputStream ,以便在写入时计算文件的摘要。 将最终摘要存储在某处以及文件的唯一标识符(以hexforms作为文件名的一部分?)。

您只需要在代码中添加这样的方法就可以了。 可能没有更好的方法。 所有工作都已由Digest API完成。

 public static String calc(InputStream is ) { String output; int read; byte[] buffer = new byte[8192]; try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); //"MD5"); while ((read = is.read(buffer)) > 0) { digest.update(buffer, 0, read); } byte[] hash = digest.digest(); BigInteger bigInt = new BigInteger(1, hash); output = bigInt.toString(16); } catch (Exception e) { e.printStackTrace( System.err ); return null; } return output; }