js大文件分段上传并获取文件md5
来源:互联网 发布:淘宝正品运动鞋货源 编辑:程序博客网 时间:2024/06/14 21:47
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>spark MD5 & chunk upload file test</title><script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="spark-md5.min.js"></script></head><body> <input type="file" name="file" id="chunkFile"><button onclick="fileObj.doUploadByFormData(0)">模拟分段上传</button><br><hr/><p id="hashcode"></p><img src="" id="imgpreview"><script type="text/javascript">console.log("page loaded");// var theFile;// $("#chunkFile").on('change',function(e){// theFile = e.target.files[0] || e.dataTransfer.files[0] || $(this)[0].files[0];// console.log(theFile); // })var chunkFileObj = {constructor: chunkFileObj,fileDOM:"#chunkFile",preImgDOM:"#imgpreview",defaultPreImgUrl:"./default.svg",uploadedCK:0,//has uploaded chunkFILE:{file:'', name:'',size:'',type:'',dataURL:'',md5Code:'',md5Percent:0,},CK:{csize:2*1024*1024,ck:'',currCK:0,CKs:0,cstart:0,cend:0},CKForm:[],init:function(){var _this = this;$(_this.fileDOM).on('change',function(e){_this.FILE.file = e.target.files[0] || e.dataTransfer.files[0] || $(_this.fileDOM)[0].files[0];_this.FILE.name = _this.FILE.file.name;_this.FILE.size = _this.FILE.file.size;_this.FILE.type = _this.FILE.file.type; _this.CK.CKs = Math.ceil(_this.FILE.size/_this.CK.csize);_this.CK.currCK = 0;_this.CK.cstart = _this.CK.currCK * _this.CK.csize;_this.CK.cend = _this.CK.cstart + _this.CK.csize; console.log('_this.FILE:',_this.FILE); console.log('_this.chunk:',_this.CK);_this.createFile();})},createFile:function(){// var text = SparkMD5.hash("123")// console.log(text);var _this = this; var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;var spark = new SparkMD5.ArrayBuffer(); var fileReader = new FileReader(); // continue reading next chunkfunction loadNextChunk(){_this.CK.cstart = _this.CK.currCK * _this.CK.csize;_this.CK.cend = (_this.CK.cstart + _this.CK.csize)>_this.FILE.size?_this.FILE.size:(_this.CK.cstart + _this.CK.csize); var item = {'chunk_num' :_this.CK.CKs,'chunk_index':_this.CK.currCK+1,'file_md5':_this.FILE.md5Code,'file_name':_this.FILE.name,'file_type':_this.FILE.type,'file_size':_this.FILE.size,'file_blob':blobSlice.call(_this.FILE.file, _this.CK.cstart, _this.CK.cend)}_this.CKForm.push(item);if(/(image)/.test(_this.FILE.type)&&_this.CK.currCK==0){ _this.readFileAsURL(); }else{ if(_this.CK.currCK==0){ $(_this.preImgDOM).attr("src",_this.defaultPreImgUrl) } let ckfile = blobSlice.call(_this.FILE.file, _this.CK.cstart, _this.CK.cend); fileReader.readAsArrayBuffer(ckfile); }}loadNextChunk();// when every chunk onloaded do somethingfileReader.onload = function(e){_this.CK.currCK++;_this.FILE.md5Percent = ((_this.CK.currCK/_this.CK.CKs)*100).toFixed(2);spark.append(e.target.result);if(_this.CK.currCK<_this.CK.CKs){_this.setVal("#hashcode","加密中:"+_this.FILE.md5Percent+"%");loadNextChunk();}else{// when the last chunk let's end this party_this.FILE.md5Code = spark.end();_this.setVal("#hashcode","加密100%:"+_this.FILE.md5Code);console.log('hashCode:',_this.FILE.md5Code); console.log('CKForm:',_this.CKForm); }}},/** * 图片文件 生成预览图 * @return {[type]} [description] */readFileAsURL:function(){var fileReader = new FileReader(); fileReader.readAsDataURL(this.FILE.file); fileReader.onload = function(e){ $(this.preImgDOM).attr("src",e.target.result)}},doUploadByFormData:function(i){console.log(i)var _this = this;var fd = new FormData();fd.append('chunk_num',this.CKForm[i].chunk_num);fd.append('chunk_index',this.CKForm[i].chunk_index);fd.append('file_md5',this.CKForm[i].file_md5);fd.append('file_name',this.CKForm[i].file_name);fd.append('file_type',this.CKForm[i].file_type);fd.append('file_size',this.CKForm[i].file_size); fd.append('file_blob',this.CKForm[i].file_blob); console.log("上传第"+this.uploadedCK+"块数据:",fd.get("chunk_index"));var jqxhr = $.post("http://www.w3school.com.cn/ajax/gethint.asp?q=a&sid=0.38385258912126274", fd , function() { alert("success"); }) .success(function() { if(i<_this.CK.CKs){ _this.doUploadByFormData(i+1); } }) .error(function(err) { console.log("error:"+err); if(i<_this.CK.CKs){ _this.doUploadByFormData(i+1); } }) .complete(function() { console.log("complete"); }); }, setVal:function(dom,val){ $(dom).html(val); }, testUpload:function(){var _this = this; for (var i = 0; i < this.CKForm.length; i++) { (function(i){ setTimeout(function(){ _this.uploadedCK++; _this.doUploadByFormData(i) },1000*i) })(i); } }}var fileObj = chunkFileObj;fileObj.init();</script></body></html>
阅读全文
0 0
- js大文件分段上传并获取文件md5
- 大文件分段上传
- 大文件的分段上传
- Web Service 分段上传大文件
- C# 大文件分段上传,下载
- js获取文件MD5值
- Spark-MD5 JS获取文件MD5
- HTML5 文件域+FileReader 分段读取文件并上传-WebSocket
- js 文件的上传 分段读取文件 FileReader
- js无刷新文件上传并获取数据
- 上传文件,并获取文件名
- 获取大文件MD5值(JAVA)
- 获取大文件MD5值(JAVA)
- Qt之大文件获取MD5值
- Qt之大文件获取MD5值
- 原生java http方式上传大文件(含 文件流分段上传问题、base64分段转码问题解决思路)
- Meter 上传文件前,js计算文件的md5值
- js上传文件获取文件流
- java/javaWeb高频面试笔试题,全面!
- 在hibernate中,对数据库的增删改操作以及HQL查询与QBC查询的语句的编写语法
- 原生 JS怎么 实现最简单的图片懒加载
- 函数默认参数
- 【提高组NOIP2008】双栈排序 (twostack.pas/c/cpp)
- js大文件分段上传并获取文件md5
- mac下安装mongodb扩展用到的小坑以及正确安装
- Androidimageslider只显示圆点使用
- unittest 单元测试框架 web测试
- Linux自动备份mysql脚本
- CentOS7.4安装部署环境出现问题总结
- android跨类跨界面传递数据EaseMessage
- Visual Attribute Transfer through Deep Image Analogy论文阅读笔记
- Linux 配置静态IP