md5驗證文件上傳,確保信息傳輸完整一致


 

注:因為是公司項目,僅記錄方法和思路以及可公開的代碼。

最近在公司的項目中,需要實現一個上傳升級包到服務器的功能;

在往服務器發送文件的時候,需要確保 文件從開始發送,到存入服務器磁盤的整個傳輸的過程沒有發生變動;

這時候想起了MD5;

關於MD5:

MD5值就像是這個文件的“數字指紋”,每個文件的MD5值是不同的。

如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”就會發生變化。

MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的“數字指紋”;

 

計算MD5值並自動的工具:

    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 2MB
            chunks = 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 buffer
            currentChunk++;
            var md5_progress = Math.floor((currentChunk / chunks) * 100);
            console.log(file.name + "  正在處理,請稍等," + "已完成" + 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

注:使用需要微改。

調用:

get_filemd5sum(File);

效果:

選擇文件前:

選擇文件后:

如果文件比較大,生生需要一點點時間

最后:

最后將文件和本頁面的MD5驗證碼發送到服務器后台,后台再讀取收到的文件,再計算MD5,最后和在上傳前的MD5驗證,如果驗證通過就添加記錄,否則刪除文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM