博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
layui 框架之秒传文件 (前端分段 MD5 型成秒传)
阅读量:4983 次
发布时间:2019-06-12

本文共 4636 字,大约阅读时间需要 15 分钟。

layui 框架之秒传文件 (前端分段 MD5 型成秒传)

思路:

通过layui框架的上传功能,在上传选择文件后,使用 ,对文件进行md5加密,再上传时,使用 把md5值赋给文件,和数据一并上传 (注意:他的上传方式为post请求 )

代码:

test.html

    
文件名 大小 状态 操作

my_md5.js

// var res_md5// 框架部分layui.use('upload', function () {    var $ = layui.jquery        , upload = layui.upload;    //多文件列表示例    var demoListView = $('#demoList')        , uploadListIns = upload.render({        elem: '#testList'        , url: '/home/upload/' //请求的地址        , accept: 'file'        , multiple: true        , auto: false        , bindAction: '#testListAction'        , choose: function (obj) {            data={'md5':'asdada'}            var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列            //读取本地文件            obj.preview(function (index, file, result) {                ress = check(file); // 执行获取md5                console.log(ress);                var tr = $([''                    , '' + file.name + ''                    , '' + (file.size / 1014).toFixed(1) + 'kb'                    , '等待上传'                    , ''                    , ''                    , ''                    , ''                    , ''].join(''));                //单个重传                tr.find('.demo-reload').on('click', function () {                    obj.upload(index, file);                });                //删除                tr.find('.demo-delete').on('click', function () {                    delete files[index]; //删除对应的文件                    tr.remove();                    uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选                });                demoListView.append(tr);            });        }        ,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。            console.log(res_md5,13)            this.data={'md5':res_md5}            }        , done: function (res, index, upload) {            if (res.code == 0) { //上传成功                var tr = demoListView.find('tr#upload-' + index)                    , tds = tr.children();                tds.eq(2).html('上传成功');                tds.eq(3).html(''); //清空操作                return delete this.files[index]; //删除文件队列已经上传成功的文件            }            this.error(index, upload);        }        , error: function (index, upload) {            var tr = demoListView.find('tr#upload-' + index)                , tds = tr.children();            tds.eq(2).html('上传失败');            tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传        }    });});// 生成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:文件对象    split_num: 需要分割生成MD5的数量,默认32    get_byte: 每段需要取的字节个数,默认64字节    小于2MB的文件直接MD5*/    // 判断 split_num和get_byte 是否为数字    // fileId为:    // file {name: "System Toolkit_2.2.1_xclient.info.dmg", lastModified: 1559223750878, lastModifiedDate: Thu May 30 2019 21:42:30 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 18142208, …}lastModified: 1559223750878lastModifiedDate: Thu May 30 2019 21:42:30 GMT+0800 (中国标准时间) {}name: "System Toolkit_2.2.1_xclient.info.dmg"size: 18142208type: ""webkitRelativePath: ""__proto__: File "1212"    var blob = fileId;    // 定义常量 const ,不可修改    // 获取文件的总大小    const size = blob.size;    // 计算每段的大小    const mean_size = Math.floor(size / split_num);    // 判断文件大小,如果小于 split_num * get_byte 就直接MD5    if (size < split_num * get_byte) {                    //创建读取器对象FileReader                    //数据读完会触发onload事件            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        }    }}

MD5.js

(自己下载一下)'https://blog-static.cnblogs.com/files/tyler-bog/md5_encrypt.js'

后端接收数据

MD5提交的方式是用post方式请求,可以通过请求的地址来接收值。

转载于:https://www.cnblogs.com/tyler-bog/p/10994315.html

你可能感兴趣的文章
关于SQL Server 2017中使用json传参时解析遇到的多层解析问题
查看>>
[转]SVN客户端解决authorization failed问题
查看>>
/etc/init.d目录和/etc/rc.local脚本
查看>>
Kubernetes StatefulSets
查看>>
用Python对html进行编码
查看>>
[转载]Java文件路径详解
查看>>
18.3.2从Class上获取信息(构造器)
查看>>
【TortoiseGit】TortoiseGit将本地库push到远端
查看>>
怎么样学习算法导论理论知识-算法何用
查看>>
Jenkins使用手册及总结
查看>>
Latest Common Ancestor
查看>>
getByClass--获取指定标签且class为指定的所有元素
查看>>
三点顺序
查看>>
拟物化设计与扁平化设计
查看>>
PS小实验-去除水印
查看>>
IS-IS完整笔记
查看>>
★如何解释特修斯之船问题?
查看>>
玩转PS路径,轻松画logo!
查看>>
Python简介及学习
查看>>
!!!后续博客写到简书 + 博客园留博客目录
查看>>