zoukankan      html  css  js  c++  java
  • 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>

    测试源码
     
  • 相关阅读:
    [luogu1540]机器翻译 (模拟/vector练习)
    牛客网数据库SQL实战解析(1-10题)
    Spark本地配置
    zookeeper基本配置以及一些坑
    更改默认Xcode
    速记OSI七层协议模型
    实用的git log用法
    Mac上如果看不到.git目录的解决方法
    Mac上Safari不能关键字搜索
    今天开始写技术博客,聊技术,聊梦想,共同成长!
  • 原文地址:https://www.cnblogs.com/kylin2016/p/5856817.html
Copyright © 2011-2022 走看看