当前位置: 首页 > news >正文

前端md5校验文件

前端获取文件的md5值,与文件一同传到后端,后端同样对md5值进行校验。如果相同,则文件未被损坏(其实这种方式优点类似于tcp、ip的差错校验,好像token也是这种方式)

项目准备

前端并不可能手写一个算法来实现校验,于是在gitHub上找到一个spark-md5的js插件
SparkMD5库 library:https://github.com/satazor/SparkMD5

npm i spark-md5  -save

代码处理

在处理过程中,需要注意的是file.onload是一个异步事件,因此使用时需要使用promise封装一下,才能得到异步的返回值
,然后在后面处理ajax请求

export default function (file) {return newPromise(resolve, reject){//声明必要的变量let fileReader = new FileReader()//文件分割方法(注意兼容性)blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice,//文件每块分割2M,计算分割详情chunkSize = 2097152,chunks = Math.ceil(file.size / chunkSize),currentChunk = 0,//每块文件读取完毕之后的处理fileReader.onload = function (e) {console.log("读取文件", currentChunk + 1, "/", chunks);//每块交由sparkMD5进行计算spark.appendBinary(e.target.result);currentChunk++;//如果文件处理完成计算MD5,如果还有分片继续处理if (currentChunk < chunks) {loadNext();} else {console.log("finished loading");console.info("计算的Hash", spark.end());}//处理单片文件的上传function loadNext() {var start = currentChunk * chunkSize,end = start + chunkSize >= file.size ? file.size : start + chunkSize;fileReader.readAsBinaryString(blobSlice.call(file, start, end));}loadNext();}}
}

如果是前端生成文件流,则

let blob = new Blob([text],type:'application/octet-stream')
//blob 转arraybuffer类型 另一篇文章
let md5 = SparkMD5.ArrayBuffer.hash(arraybuffer).toString().toUpperCase();

spark-md5 的详解博客推荐
https://blog.csdn.net/qq_36017964/article/details/131247303

http://www.lryc.cn/news/340074.html

相关文章:

  • 总结SQL相对常用的几个字符函数
  • 云计算笔记
  • 网络安全学习路线-超详细
  • 【多模态检索】Coarse-to-Fine Visual Representation
  • VRRP——虚拟路由冗余协议
  • 隧道应急广播应该如何搭建?
  • OpenHarmony实战开发-Worker子线程中解压文件。
  • 中国科学院大学学位论文LaTeX模版
  • 秘塔和Kimi AI在资料查询和学习中的使用对比
  • apk反编译
  • 修改百度百科的词条的方法
  • 更改ip地址的几种方式有哪些
  • Flink学习(六)-容错处理
  • 设计模式(020)行为型之备忘录模式
  • Android 系统锁屏息屏休眠时Handler CountDownTimer计时器停止运行问题解决
  • Java中如何提取视频文件的缩略图
  • 总结 HashTable, HashMap, ConcurrentHashMap 之间的区别
  • 《剑指 Offer》专项突破版 - 面试题 107 : 矩阵中的距离(C++ 实现)
  • 揭秘智慧礼品背后的故事
  • NVM的安装与配置
  • [Java EE] 多线程(一) :线程的创建与常用方法(上)
  • Linux安装docker(含Centos系统和Ubuntu系统)
  • 【第十五届蓝桥杯大赛软件赛省赛】———— C/C++ 大学B组
  • Redis+lua脚本限制ip多次输入错误密码
  • 全球顶级的低代码开发平台,你知道几个?
  • 11-1.Vue2.x基本列表—v-for
  • 一本书精通推荐算法,轻松搞定入门、面试、进阶
  • ADB的基本语法及常用命令
  • Linux之bpfjit(2)使用分析和mini-tcpdump实现
  • adb常用命令汇总