asp.net和js读取文件的MD5值的方法

前言

文件的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>

测试源码
 
posted @ 2016-09-09 15:28  kylin2016  阅读(1250)  评论(0编辑  收藏  举报