0


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

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

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

安装:

  1. npm install --save-dev spark-md5

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

  1. import SparkMD5 from 'spark-md5'
  2. var hexHash = SparkMD5.hash('Hi there'); // hex hash
  3. var rawHash = SparkMD5.hash('Hi there', true); // OR raw hash (binary string)
  4. console.log(hexHash); //d9385462d3deff78c352ebb3f941ce12
  5. console.log(rawHash); //Ù8TbÓÞÿxÃRë³ùAÎ

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

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

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

  1. <input type="file" @change="getFile">
  2. getFile(file){
  3. let fileReader = new FileReader();
  4. fileReader.onload = function (e) {
  5. let hexHash = SparkMD5.hash(e.target.result);
  6. console.log(hexHash);
  7. };
  8. fileReader.readAsDataURL(file.target.files[0]);
  9. }

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

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

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

欢迎关注个人订阅号 coding个人笔记


本文转载自: https://blog.csdn.net/wade3po/article/details/128016682
版权归原作者 wade3po 所有, 如有侵权,请联系我们删除。

“spark-md5根据文件内容生成hash”的评论:

还没有评论