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的方法,但是如果是大文件斷點(diǎn)續(xù)傳的話,這種方式獲取hash碼就不行了。因?yàn)槟闵蟼鞯奈募赡?G,4G,5G甚至更大,你的內(nèi)存根本盛不下,這時(shí)候就需要換一種計(jì)算hash的方法了。function?calcMD5(file,callback){
this.upstate="MD5計(jì)算中...";
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)=>{
//對(duì)于讀取的文件計(jì)算hash碼。
spark.append(e.target.result);
currentChunk++;
this.percent=((currentChunk/chunks)*100).toFixed(2)-0;
if(currentChunk
loadNext();
}else{
callback(spark.end());
}
}
//分次讀取大文件的內(nèi)容,
function?loadNext(){
let?start=currentChunk*chunkSize,
end=((start+chunkSize)>=file.size)?file.size:start+chunkSize;
fileReader.readAsArrayBuffer(file.slice(start,end));
}
loadNext();
},
上面這個(gè)方法,通過分片讀取文件,并將讀取的文件內(nèi)容添加到sparkMD5的hash計(jì)算中,直到文件讀取完畢,最后返回最終的hash碼到callback回調(diào)函數(shù)里面。這種方法理論上讀取的文件可以無限大。
斷點(diǎn)續(xù)傳的原理
web中我們通過sparkMD5計(jì)算文件的hash碼,傳遞到后臺(tái),后臺(tái)查詢此hash碼,如果查詢到,則表明此文件已經(jīng)上傳過,或者已經(jīng)上傳過一部分,如果是上傳了一部分,則返回已上傳的字節(jié)數(shù),前端通過slice方法分割文件傳輸剩余的部分,就可以實(shí)現(xiàn)斷點(diǎn)續(xù)傳了。
這里暫對(duì)斷點(diǎn)續(xù)傳的原理做簡單介紹,下篇文章將詳細(xì)闡述斷點(diǎn)續(xù)傳的過程以及貼出實(shí)現(xiàn)代碼,敬請(qǐng)關(guān)注
總結(jié)
以上是生活随笔為你收集整理的html5计算文件hash,spark-md5生成hash码,spark-md5计算大文件hash码实现断点续传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高手博客地址
- 下一篇: runtime error r6025