• 前后端文件内容 md5 计算


    目前普遍应用的比较多的是计算文件名的 md5,利用 jquery.md5.js 即可实现;若要计算文件内容的 md5,jquery.md5.js 就实现不了,需要用到插件:SparkMD5

    前端 js

    1、index.html

    <form class="layui-form" action="">
            <div class="layui-inline" style="margin-bottom: 10px !important;">
                <label class="layui-form-label">上传文件</label>
                <div class="layui-input-block">
                    <input id="file" name="title" class="layui-input" type="file"
                           autocomplete="off" lay-verify="title">
                </div>
            </div>
    
    
            <div class="layui-form-item" style="margin-top: 1.25rem;">
                <div class="layui-input-block">
                    <div class="layui-btn" type="submit" lay-filter="demo1" lay-submit="" id="submits">立即提交</div>
                </div>
            </div>
    
        </form>
    

    2、index.js

    <script src="{% static 'js/jquery.min.js' %}"></script>
    <script src="{% static 'js/spark-md5.min.js' %}"></script>          // 导入次 js
    <script>
        $(document).ready(function () {
            document.getElementById('file').addEventListener('change', function () {
                var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice,
                    file = this.files[0],
                    chunkSize = 2097152,                             // 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++;
    
                    if (currentChunk < chunks) {
                        loadNext();
                    } else {
                        var md5 = spark.end();                  // 获取md5,此处有坑,使用过一次后再传递值,值会发生变化
    
                        // 将 md5 保存到 js 缓存中
                        var storage = window.localStorage;
                        storage.setItem("file_md5", spark.end())
                    }
                };
    
                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();
            });
    
        });
    
        // js读取cookie的方法
        function getCookie(name) {
            var r = document.cookie.match("\b" + name + "=([^;]*)\b");
            return r ? r[1] : undefined;
        }
    
        layui.use('layer', function () {
            var layer = layui.layer;
        });
    
        $('#submits').click(function () {
            var formdata = new FormData();  // 生成文件对象
            formdata.append('file', $('#file')[0].files[0]); //添加文件流
    
            // 从缓存中取出文件内容 md5
            var storage = window.localStorage;
            var value = storage.getItem("file_md5");
    
            $.ajax({
                url: '/v1/remoteBinFile/?md5=' + value + '',
                type: 'post',
                dataType: 'json',
                headers: {
                    "X-CSRFToken": getCookie("csrf_token")
                },
    
                data: formdata,
                processData: false,             // ajax post 请求上传文件必须添加这两句
                contentType: false,
    
                success: function (resp) {
                    var msg = resp[10007];
                    layer.msg(msg);
                }
            })
        });
    
    </script>
    

    参考文章:

    后端 Python

    import hashlib
    import os
    
    
    def GetFileMd5(filename):
        """
        计算文件的MD5值
        :param filename:
        :return:
        """
        if not os.path.isfile(filename):
            return
        myhash = hashlib.md5()
        with open(filename, 'rb') as f:
            while True:
                b = f.read(8096)
                if not b:
                    break
                myhash.update(b)
            f.close()
    
    
        return myhash.hexdigest()           # c8030929da1e41862048f1f50cf0b3ce
    
    
    if __name__ == '__main__':
        GetFileMd5(r'C:Usersdly15Desktop新建文本文档.txt')
    
  • 相关阅读:
    Android-Universal-Image-Loader学习笔记(两)--LruDiscCache
    linux 多个源文件在编译时会产生一个目标文件
    springMVC 获取本地项目路径 及后整理上传文件的方法
    Cf 444C DZY Loves Colors(段树)
    什么是EF, 和 Entity Framework Demo简单构建一个良好的发展环境
    Mac下一个/usr/include失踪
    ArcGIS 10 破解安装(win7 64位)
    Android ProgressBar 反向进度条/进度条从右到左走
    Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)
    poj 3273 Monthly Expense (二分)
  • 原文地址:https://www.cnblogs.com/midworld/p/13610899.html
Copyright © 2020-2023  润新知