首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spark-md5根据文件内容生成hash

spark-md5根据文件内容生成hash

作者头像
wade
发布2022-12-02 20:25:43
1.2K0
发布2022-12-02 20:25:43
举报
文章被收录于专栏:coding个人笔记coding个人笔记

当我们上传文件的时候,文件内容不会根据文件名修改而改变,不同文件类型都可以用进制工具查看(十六进制编辑器UltraEdit),对应的文件内容也是固定的。那些文件续传或者秒传的功能就是根据文件内容生成唯一的hash,上传之前让后台判断是否传递过,或者传递了哪些,再根据状态续传或者秒传。

今天分享的是spark-md5这个包,可以根据内容获取唯一的hash。

安装:

npm install --save-dev spark-md5

有两种hash,一个是hex hash十六进制,一个是raw hash(不知道翻译成什么):

import SparkMD5 from 'spark-md5'

var hexHash = SparkMD5.hash('Hi there'); // hex hash
var rawHash = SparkMD5.hash('Hi there', true); // OR raw hash (binary string)
console.log(hexHash); //d9385462d3deff78c352ebb3f941ce12
console.log(rawHash); //Ù8TbÓÞÿxÃRë³ùAÎ

还有另外一种用法,但是raw hash获得的结果不一样:

var spark = new SparkMD5();
spark.append('Hi');
spark.append(' there');
var hexHash = spark.end(); // hex hash
var rawHash = spark.end(true); // OR raw hash (binary string)
console.log(hexHash);//d9385462d3deff78c352ebb3f941ce12
console.log(rawHash);//Ԍُ

所以用十六进制的hash应该是更好一些,这边试了一下文件的hash:

<input type="file" @change="getFile">

getFile(file){
  let fileReader = new FileReader();
  fileReader.onload = function (e) {
    let hexHash = SparkMD5.hash(e.target.result);
    console.log(hexHash);
  };
  fileReader.readAsDataURL(file.target.files[0]);
}

这边要用FileReader把文件内容变成文本或者base64或者ArrayBuffer,官方文档提供的就是文本和ArrayBuffer,而FileReader就有这几个API,FileReader可以把Blob转成其他格式的数据,主要是三个方法readAsText(转化成文本)、readAsArrayBuffer把Blob转成ArrayBuffer、readAsDataURL把Blob转成Base64。

测试了一下,改了文件名输出的hash还是一样,内容修改了,加个空格输出的hash也会改变。

当我们要做断点续传的时候,就把文件用Blob.prototype.slice把文件切片,然后把每个切片的文件获取到hash,再加上数组index,组成一个一个的文件名,跟流一起传给后台。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档