使用fileReader + spark-md5 获取文件的md5码
(MD5是文件签名,相当于我们的身份证 独一无二的 , https://baike.baidu.com/item/MD5/212708?fr=aladdin#3)
npm i spark MD5
import SparkMD5 from 'spark-md5'
handlePrepareUpload() {
var file = this.fileList[0]
const fileSize = file.size; // 文件大小
const chunkSize = 1024 * 1024 * 10; // 切片的大小
const chunks = Math.ceil(fileSize / chunkSize); // 获取切片个数
const fileReader = new FileReader();
const spark = new SparkMD5.ArrayBuffer();
const bolbSlice = File.prototype.slice || File.prototype.mozSlice ||
File.prototype.webkitSlice;
let currentChunk = 0;
fileReader.onload = e => {
const res = e.target.result;
spark.append(res);
currentChunk++;
if (currentChunk < chunks) {
loadNext();
console.log(`第${currentChunk}分片解析完成, 开始第${currentChunk +1}分片解析`);
} else {
const md5 = spark.end();
console.log('解析完成');
alert(md5)
}
};
const loadNext = () => {
const start = currentChunk * chunkSize;
const end =
start + chunkSize > file.size ? file.size : start + chunkSize;
fileReader.readAsArrayBuffer(bolbSlice.call(file, start, end));
};
loadNext();
},
调用后端查询接口查询文件是否已存在。如果不存在,进行文件分片上传。
let file = new window.File([new Blob([res])], file.name,{type: file.type}); 组合入参,调用接口。接口404,是因为接口需要的是formData,而404的原因是 入参是个对象。