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>

    本文版权归作者(谢俊)和博客园所有,欢迎转载,转载请标明出处。

    原文地址:http://www.cnblogs.com/net-xiejun/

    微信开发群C#.NETWEB程序开发交流

    完整源码下载:https://github.com/xiejun-net/weixin

    公众账号:

  • 相关阅读:
    bios设置启动方式问题
    springmvc 之 easyUI开发商城管理系统
    maven 整合 ssm 异常分析
    maven 之nexus仓库管理_私服配置
    maven 之 web.xml 头设置错误问题
    maven之jre默认配置
    springMvc异常之 For input string: "show"
    mysql参照完整性 策略设置之 on update 和 on delete
    ssm之mapper异常 Result Maps collection already contains value for com.ssj.mapper.UserMapper 和 Type interface com.ssj.mapper.UserMapper is already known to the MapperRegistry.
    HDU-2054 A==B?
  • 原文地址:https://www.cnblogs.com/net-xiejun/p/4988350.html
Copyright © 2011-2022 走看看