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

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

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

这时候想起了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 2MBchunks = 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 buffercurrentChunk++;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();}

View Code

注:使用需要微改。

调用:

get_filemd5sum(File);

效果:

选择文件前:

选择文件后:

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

最后:

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

转载于:https://www.cnblogs.com/ynhwl/p/10284306.html

md5验证文件上传,确保信息传输完整一致相关推荐

  1. fastDFS分布式文件系统--文件上传/下载/查询完整代码实现

    搭建环境 这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在: https://github.com/happyfish100/fastdfs-client-j ...

  2. Ajax 文件上传(前后端完整代码,注意修改文件保存路径\访问路径)

    一.前端代码: ① html 代码: 注意:如需要选择多个文件,进行上传,Ⅰ.multiple="multiple" 不能省 Ⅱ.选择时是 Ctrl + 你所要选择的文件,不要分多 ...

  3. C++:FTP文件上传下载(附完整源码)

    C++:FTP文件上传下载 FTP文件下载 FTP文件上传 FTP文件下载 #include #include #include #pragma comment(lib, "WinInet. ...

  4. 文件上传到服务器 完整代码,上传文件到服务器 前端+后台代码

    不是原创,但有必要记录一下,免得每次都找的很辛苦 html Select a File to Upload js function fileSelected() { var file = docume ...

  5. Flask-WTF —— 文件上传验证

    Flask 学习笔记 一.文件上传验证 1.1.文件上传 在模版中,form 表单中,需要指定 encotype='multipart/form-data' 才能上传文件. 在后台如果想要获取上传的文 ...

  6. 通达OA任意文件上传/文件包含RCE漏洞分析

    通达OA任意文件上传/文件包含RCE漏洞分析 0x01 前提 0x01 漏洞介绍 0x02 漏洞分析 首先下载安装 绕过身份验证文件上传部分 变量传递问题 文件包含部分 0x01 前提 关于这个漏洞的 ...

  7. php上传文件默认路径,PHP文件上传到指定目录的实现过程实例解析

    摘要:文件上传其实很简单,通过form表单就可以实现.但form表单上传文件只是把文件放到服务器的临时目录,它还需要我们把上传到临时目录的文件转放到服务器的指定目录.简单的说:把文件从临时目录移动到指 ...

  8. java大文件 索引_JAVA 大文件上传解决方案(500M以上)

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  9. portswigger 目录遍历文件上传

    目录 <1> 目录遍历 什么是目录遍历? 通过目录遍历读取任意文件 (1) 去除了多余 URL 解码的遍历序列 (2) 非递归剥离的遍历序列 如何防止目录遍历攻击 <2> 文件 ...

  10. is_file php 绕过,文件上传之绕过

    一般防止上传漏洞手法 1.客户端检测:客户端使用JavaScript检测,在文件未上传时,就对文件进行验证 //任何客户端的验证都是不安全的,客户端验证目的是防止用户输入错误.减少 //服务器开销,而 ...

最新文章

  1. 最新最全的用户画像系统详解,还可免费试用哦!
  2. 【练习】不同排序算法执行时间比较
  3. [转]桌面任务栏时间显示为yyyy-M-d,
  4. Axure RP使用攻略--动态面板的用途(8)
  5. 2021-02-03-延长一天时间的有效方法
  6. sqlserver查询补全时间_mssql 按日期分组(group by)查询统计的时候,没有数据补0的解决办法...
  7. 导览系统定制开发_联联周边游系统源码定制开发平台方案
  8. 阿里云释放数据能力 开启大数据元年
  9. 全球首款5g全网通智能路由器华为5G CPE Pro发布 售价2499元
  10. Jquery实现轮播图效果(fadeIn()和fadeOut()方法的应用)
  11. 浅谈 多任务学习 在推荐系统中的应用
  12. 纳德拉:微软正计划“终极移动设备”
  13. tortoiseHg查看后一个版本和parent版本的不同
  14. 在Kali中安装foremost
  15. 神秘诡异的量子世界是如何毁掉科学家三观的?
  16. 其实很简单 QQ被盗了可以这样找回来(转)
  17. 《计算机文件管理》教学设计,《文件和文件夹的操作》教学设计
  18. 实现连续签到案例的可能(使用)
  19. Unity:AudioSource
  20. WEB前端技能考核内容及岗位要求 送给找工作的童鞋 详细概括

热门文章

  1. windows启动时自动运行程序四种方法(登录或不登录都可以的)
  2. 算法提高 盾神与条状项链
  3. 第七章:项目成本管理 - (7.3 制定预算)
  4. 姓名签名设计手写简单自己名字怎么写
  5. ATFX:美股持续走高,空头趋势或将终结?
  6. 行列式与矩阵相关的内容学习
  7. 详细分析Java8中default关键字
  8. noi acm topcoder
  9. 乔布斯其人的演讲技巧
  10. 被巨头“封杀”后,中国移动互联网企业如何加速出海