前端获取上传文件的MD5—spark-md5

1、安装

npm i spark-md5

2、页面中引用

import SparkMD5 from 'spark-md5'

3、具体使用方法

     // 获取apk的md5
      var fileReader = new FileReader()
      var spark = new SparkMD5() // 创建md5对象(基于SparkMD5)
      fileReader.readAsBinaryString(myfile) // myfile 对应上传的文件

      // 文件读取完毕之后的处理
      fileReader.onload = (e) => {
        console.log('获取文件的md5')
        spark.appendBinary(e.target.result)
        const md5 = spark.end()
        console.log(md5)
 
      }

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大文件分片上传前后端可以通过MD5加密来保证文件传输的完整性和准确性。 前端上传文件之前,可以通过如下代码计算文件的MD5值: ```javascript function getFileMD5(file) { return new Promise((resolve, reject) => { const fileReader = new FileReader() const spark = new SparkMD5.ArrayBuffer() const chunkSize = 2097152 // 每个分片的大小为2MB let currentChunk = 0 fileReader.onload = e => { spark.append(e.target.result) // 对每个分片进行MD5计算 currentChunk++ if (currentChunk < chunks) { loadNext() } else { const result = spark.end() resolve(result) } } fileReader.onerror = () => { reject('文件读取失败') } const chunks = Math.ceil(file.size / chunkSize) function loadNext() { const start = currentChunk * chunkSize const end = start + chunkSize > file.size ? file.size : start + chunkSize const blob = file.slice(start, end) fileReader.readAsArrayBuffer(blob) } loadNext() }) } ``` 后端在接收到文件分片之后,可以对每个分片进行MD5计算,最后将所有分片的MD5值进行合并,得到整个文件的MD5值,如下所示: ```python import hashlib def get_file_md5(file): md5_obj = hashlib.md5() chunk_size = 2097152 # 每个分片的大小为2MB current_chunk = 0 while True: chunk = file.read(chunk_size) if not chunk: break md5_obj.update(chunk) current_chunk += 1 file.seek(0) return md5_obj.hexdigest() def merge_md5(md5_list): md5_obj = hashlib.md5() md5_list.sort() for md5 in md5_list: md5_obj.update(md5.encode()) return md5_obj.hexdigest() ``` 前端将文件的MD5值和文件分片一起上传到后端,后端在接收到所有分片之后,将所有分片的MD5值进行合并,得到整个文件的MD5值,并与前端传过来的MD5值进行比较,如果相同,则说明文件传输完整无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值