html5计算文件hash,spark-md5生成hash码,spark-md5计算大文件hash码实现断点续传
spark-md5import?SparkMD5?from?'spark-md5';
var?hexHash?=?SparkMD5.hash('Hi?there');????????//?hex?hash
var?rawHash?=?SparkMD5.hash('Hi?there',?true);??//?OR?raw?hash?(binary?string)
這是最簡單的生成hash的方法,但是如果是大文件斷點續傳的話,這種方式獲取hash碼就不行了。因為你上傳的文件可能2G,4G,5G甚至更大,你的內存根本盛不下,這時候就需要換一種計算hash的方法了。function?calcMD5(file,callback){
this.upstate="MD5計算中...";
this.percent=0;
let?chunkSize=2097152,
chunks=Math.ceil(file.size/chunkSize),
currentChunk=0,
spark=new?SparkMD5.ArrayBuffer(),
fileReader=new?FileReader();
fileReader.οnlοad=(e)=>{
//對于讀取的文件計算hash碼。
spark.append(e.target.result);
currentChunk++;
this.percent=((currentChunk/chunks)*100).toFixed(2)-0;
if(currentChunk
loadNext();
}else{
callback(spark.end());
}
}
//分次讀取大文件的內容,
function?loadNext(){
let?start=currentChunk*chunkSize,
end=((start+chunkSize)>=file.size)?file.size:start+chunkSize;
fileReader.readAsArrayBuffer(file.slice(start,end));
}
loadNext();
},
上面這個方法,通過分片讀取文件,并將讀取的文件內容添加到sparkMD5的hash計算中,直到文件讀取完畢,最后返回最終的hash碼到callback回調函數里面。這種方法理論上讀取的文件可以無限大。
斷點續傳的原理
web中我們通過sparkMD5計算文件的hash碼,傳遞到后臺,后臺查詢此hash碼,如果查詢到,則表明此文件已經上傳過,或者已經上傳過一部分,如果是上傳了一部分,則返回已上傳的字節數,前端通過slice方法分割文件傳輸剩余的部分,就可以實現斷點續傳了。
這里暫對斷點續傳的原理做簡單介紹,下篇文章將詳細闡述斷點續傳的過程以及貼出實現代碼,敬請關注
總結
以上是生活随笔為你收集整理的html5计算文件hash,spark-md5生成hash码,spark-md5计算大文件hash码实现断点续传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高手博客地址
- 下一篇: runtime error r6025