md5验证文件上传,确保信息传输完整一致
?
注:因?yàn)槭枪卷?xiàng)目,僅記錄方法和思路以及可公開(kāi)的代碼。
最近在公司的項(xiàng)目中,需要實(shí)現(xiàn)一個(gè)上傳升級(jí)包到服務(wù)器的功能;
在往服務(wù)器發(fā)送文件的時(shí)候,需要確保 文件從開(kāi)始發(fā)送,到存入服務(wù)器磁盤的整個(gè)傳輸?shù)倪^(guò)程沒(méi)有發(fā)生變動(dòng);
這時(shí)候想起了MD5;
關(guān)于MD5:
MD5值就像是這個(gè)文件的“數(shù)字指紋”,每個(gè)文件的MD5值是不同的。
如果任何人對(duì)文件做了任何改動(dòng),其MD5值也就是對(duì)應(yīng)的“數(shù)字指紋”就會(huì)發(fā)生變化。
MD5就可以為任何文件(不管其大小、格式、數(shù)量)產(chǎn)生一個(gè)同樣獨(dú)一無(wú)二的“數(shù)字指紋”;
?
計(jì)算MD5值并自動(dòng)的工具:
get_filemd5sum: function (ofile) {var file = ofile;var tmp_md5;var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice,chunkSize = 8097152, // Read in chunks of 2MBchunks = Math.ceil(file.size / chunkSize),currentChunk = 0,spark = new SparkMD5.ArrayBuffer(),fileReader = new FileReader();fileReader.onload = function (e) {spark.append(e.target.result); // Append array buffercurrentChunk++;var md5_progress = Math.floor((currentChunk / chunks) * 100);console.log(file.name + " 正在處理,請(qǐng)稍等," + "已完成" + md5_progress + "%");if (currentChunk < chunks) {loadNext();} else {tmp_md5 = spark.end();$("#fileBatch").val(tmp_md5);console.log("MD5值是:" + tmp_md5);}};fileReader.onerror = function () {console.warn('oops, something went wrong.');};function loadNext() {var start = currentChunk * chunkSize,end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize;fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));}loadNext();} View Code注:使用需要微改。
調(diào)用:
get_filemd5sum(File);效果:
選擇文件前:
選擇文件后:
如果文件比較大,生生需要一點(diǎn)點(diǎn)時(shí)間
最后:
最后將文件和本頁(yè)面的MD5驗(yàn)證碼發(fā)送到服務(wù)器后臺(tái),后臺(tái)再讀取收到的文件,再計(jì)算MD5,最后和在上傳前的MD5驗(yàn)證,如果驗(yàn)證通過(guò)就添加記錄,否則刪除文件。
?
轉(zhuǎn)載于:https://www.cnblogs.com/ynhwl/p/10284306.html
總結(jié)
以上是生活随笔為你收集整理的md5验证文件上传,确保信息传输完整一致的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于模拟题的一些弱鸡总结
- 下一篇: BigBrother的大数据之旅Day