JavaScript之 文件分段MD5加密、大文件秒加密校验

js之文件分段加密、大文件秒加密

<html>
<head>
    <meta charset="utf-8">


    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div>
    上传文件 : <input type="file" name="file" id="fileId"/>
    <button type="submit" name="btn" value="提交" id="btnId" onclick="check('fileId')"/>
</div>
<!--设置成自己的md5-->
<script src="https://blog-static.cnblogs.com/files/tyler-bog/md5_encrypt.js"></script>
<script>
    // 生成MD5的函数
    function md5s(str) {
        var MD5 = new Hashes.MD5().hex(str)
        return MD5
    }
    // Button按钮点击调用此函数。fileId为上传文件input的id值
    function check(fileId, split_num = 32, get_byte = 64) {
        var info = new String;
        var sum=0;
        /*fileId:input上传文件的id
        split_num: 需要分割生成MD5的数量,默认32
        get_byte: 每段需要取的字节个数,默认64字节
        小于2MB的文件直接MD5*/

        // 判断 split_num和get_byte 是否为数字
        // 定义文件对象
        var objFile = document.getElementById(fileId);
        // 判断文件书否为空
        if (objFile.value == "") {
            alert("文件不能为空空");
            return false;
        }

        var blob = objFile.files[0];
        // 定义常量 const ,不可修改
        // 获取文件的总大小
        const size = blob.size;
        // 计算每段的大小
        const mean_size = Math.floor(size / split_num);
        // 判断文件大小,如果小于 split_num * get_byte 就直接MD5
        if (size < split_num * get_byte) {


             res_md5 = md5s(blob(0,blob.size()));         // 得到md5值
            console.log(res_md5);
            return res_md5
            }

        } else {
            var start = 0;  // 定义开始位置
        var end = get_byte; // 定义截取结束位置

        while (start < size) {
            var read = new FileReader();              //创建读取器对象FileReader
            blobs = blob.slice(start, end); //创建Blob对象
            read.readAsText(blobs);                  //开始读取文件
            start = start + mean_size;              // 下一段开始位置
            end = start + get_byte;                 // 定义截取结束位
            info += blobs;
            res_md5 = md5s(info);
            console.log(res_md5);
            return res_md5

            }


        }
    }


</script>
</body>
</html>


posted @ 2019-06-04 07:21  代码创造一切  阅读(3237)  评论(0编辑  收藏  举报