后台项目中发现下载文件时可能会因为文件不完整而打不开文件。考虑在后台响应中加入文件MD5,前台获取文件后生成的文件。检查一次MD5值,判断文件是否下载正确。这个函数的难点在于如何在响应中添加MD5值。原来的文件下载接口使用了HttpServletResponse,然后在前台使用了某个标签的点击事件来实现。在开发过程中,首先想到的就是在响应的headers中加入MD5信息,然后想办法在前台获取,即。..//response.setHeader("md5",md5sum(bytes));...privateStringmd5sum(byte[]bytes){...}在实际开发中发现该方法无法正常下载文件,所以它应该通过其他方式来实现。(这种想法还是很幼稚2333)之前开发的方案中使用了Blob对象,前台可以使用Blob对象实现文件下载,即...varurl=window.URL.createObjectURL(blob);vara=document.createElement('a');a.href=url;a.download=filename;a.click();...那么肯定可以把文件的bytearray加上后台界面,然后在JS中使用varblob=newBlob([bytearray]);声明一个blob对象来实现文件下载,那么也可以将生成的MD5值添加到返回的JSON中。代码后台importorg.apache.commons.io.IOUtils;importjava.util.HashMap;importjava.util.Map;importjava.io.*;importjava.security.MessageDigest;...privatefinalcharHEX_DIGITS[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};...@OverridepublicObjectdownloadFile(StringburketName,StringfileName){try{InputStream=...;byte[]byteArray=IOUtils.toByteArray(is);字符串fileMD5=md5sum(byteArray);映射map=newHashMap();map.put("文件",byteArray);map.put("md5",fileMD5.toUpperCase());if(is!=null){is.close();}返回地图;}catch(Exceptionex){ex.printStackTrace();}返回””;}privateStringtoHexString(byte[]b){StringBuildersb=newStringBuilder(b.length*2);for(inti=0;i
