注:因为是公司项目,仅记录方法和思路以及可公开的代码。

最近在公司的项目中,需要实现一个上传升级包到服务器的功能;

在往服务器发送文件的时候,需要确保 文件从开始发送,到存入服务器磁盘的整个传输的过程没有发生变动;

这时候想起了MD5;

关于MD5:

MD5值就像是这个文件的“数字指纹”,每个文件的MD5值是不同的。

如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”就会发生变化。

MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”;

计算MD5值并自动的工具:

    get_filemd5sum: function (ofile) {
var file = ofile;
var tmp_md5;
var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice,
chunkSize = 8097152, // Read in chunks of 2MB
chunks = Math.ceil(file.size / chunkSize),
currentChunk = 0,
spark = new SparkMD5.ArrayBuffer(),
fileReader = new FileReader(); fileReader.onload = function (e) {
spark.append(e.target.result); // Append array buffer
currentChunk++;
var md5_progress = Math.floor((currentChunk / chunks) * 100);
console.log(file.name + " 正在处理,请稍等," + "已完成" + md5_progress + "%"); if (currentChunk < chunks) {
loadNext();
} else {
tmp_md5 = spark.end();
$("#fileBatch").val(tmp_md5);
console.log("MD5值是:" + tmp_md5);
}
}; fileReader.onerror = function () {
console.warn('oops, something went wrong.');
}; function loadNext() {
var start = currentChunk * chunkSize,
end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize;
fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
} loadNext();
}

注:使用需要微改。

调用:

get_filemd5sum(File);

效果:

选择文件前:

选择文件后:

如果文件比较大,生生需要一点点时间

最后:

最后将文件和本页面的MD5验证码发送到服务器后台,后台再读取收到的文件,再计算MD5,最后和在上传前的MD5验证,如果验证通过就添加记录,否则删除文件。

最新文章

  1. 归一化变换 Normalizing transformations
  2. Utils
  3. drop表后仍占表空间解决办法
  4. 一个js获取数组下标的函数
  5. Android中JNI的使用方法
  6. Google地图接口API之地图事件(四)
  7. ajax请求后台,返回json格式数据,模板!
  8. PeopleSoft Object Types Definitions
  9. 19、XHTML
  10. Java中,当表单含有文件上传时,提交数据的如何读取
  11. fedora21安装无线驱动
  12. linux服务搭建----ssh服务开启
  13. C# /VB.NET 插入、修改、删除Word批注
  14. python---购物车
  15. RecyclerView android
  16. 【scarpy】笔记三:实战一
  17. cocos creator 动态创建精灵
  18. redis_bj_01
  19. SP10707 COT2 - Count on a tree II (树上莫队)
  20. Android 编程下的 TraceView 简介及其案例实战

热门文章

  1. Oracle环境配置之山路十八弯
  2. vue element-ui 组件上传图片 以及对 图片的 宽高 和 大小 格式等 做出限制
  3. 详细解读go语言中的chnanel
  4. vue-过滤器(filter)的使用详解
  5. shell脚本获取文件名、路径名、文件类型
  6. Postman 根据nginx日志查账号
  7. try/catch捕获处理异常
  8. AOP快速入门
  9. 面试HashMap你都扛不住,还想拿到offer?
  10. 教你搞懂Jenkins安装部署!