前言
文件的md5值,即文件簽名,為了驗證文件的正確性,是否被惡意篡改等。每個文件有一個唯一的md5值。
最近公司開發的app文件包的校驗就有用到文件md5值。
一、asp.net獲取
①和上傳文件一樣,得到本地文件的集合,方法很多,我是用Ajax upload.js插件上傳 在這里省略
②得到imgFile代碼如下 sb.ToString()即為該文件的MD5值。
HttpPostedFile imgFile = context.Request.Files["imgFile"];//本地文件的集合 MD5 md5 = new MD5CryptoServiceProvider(); byte[] retVal = md5.ComputeHash(imgFile.InputStream); StringBuilder sb = new StringBuilder(); for (int i = 0; i < retVal.Length; i++) { sb.Append(retVal[i].ToString("x2")); } context.Response.Write(sb.ToString());
二、js獲取文件的MD5
第一種方法獲取文件MD5值得一個弊端是需要將文件流上傳到服務端,當文件比較大的時候,讀取會比較忙。所以后面從網上找到用js讀取本地文件md5值得方法:
html代碼
<input id="ChooseFile" type="file" value="上傳文件"/> <div id="log"></div>
js代碼
<script src="http://cdn.rawgit.com/satazor/SparkMD5/master/spark-md5.min.js"></script> <script> var log = document.getElementById("log"); document.getElementById("ChooseFile").addEventListener("change", function () { var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice, file = this.files[0], chunkSize = 2097152, // 將文件切割成2m讀取 因為文件太大可能讀取失敗 chunks = Math.ceil(file.size / chunkSize), currentChunk = 0, spark = new SparkMD5.ArrayBuffer(), frOnload = function (e) { spark.append(e.target.result); currentChunk++; if (currentChunk < chunks)//判斷是否讀取完成 loadNext(); else log.innerHTML = spark.end().toUpperCase(); }; function loadNext() { var fileReader = new FileReader(); fileReader.onload = frOnload; var start = currentChunk * chunkSize, end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); }; loadNext();//調用 }); </script>
本文版權歸作者(謝俊)和博客園所有,歡迎轉載,轉載請標明出處。
原文地址:http://www.cnblogs.com/net-xiejun/
完整源碼下載:https://github.com/xiejun-net/weixin
公眾賬號: