文件断点续传和秒传的一些问题
2015-12-08 16:47
204 查看
1、文件md5计算时机
在文件添加是进行md5计算。问题:注意开始上传按钮显示与隐藏的时机。
uploader.bind('FilesAdded', function (up, files) { $("#uploader_start").hide(); for (var i in files) { filecount=files.length; var fileReader = new FileReader(), box = document.getElementById('box'); blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice, file = files[i].getNative(), chunkSize = 209715200000, chunks = Math.ceil(file.size / chunkSize), currentChunk = 0, spark = new SparkMD5(); sizestr+=files[i].size+":"; fileReader.onload = function (e) { spark.appendBinary(e.target.result); currentChunk++; if (currentChunk < chunks) { loadNext(); } else { var tempMd5=spark.end(); md5str+=tempMd5+":"; box.innerHTML="正在检查秒传"; $("#md5Str").val(md5str); if (currentcount==filecount) { $("#uploader_start").show(); box.innerHTML=""; } currentcount++; } }; function loadNext() { var start = currentChunk * chunkSize, end = start + chunkSize >= file.size ? file.size : start + chunkSize; fileReader.readAsBinaryString(blobSlice.call(file, start, end)); } loadNext(); } });
2、文件上传之前的参数传递
uploader.bind("BeforeUpload",function(up,files){ uploader.setOption("multipart_params", { md5Result:md5str, sizeResult:sizestr, //和一些其他必要的参数 }); });
3、ashx处理
foreach (string upload in context.Request.Files) { if (upload != null && upload.Trim() != "") { if(数据库中存在该文件的MD5&&已上传完整) { break; } else { if(临时文件的文件夹不存在) { //创建临时文件夹 } //tempchunk:根据已上传文件文件大小计算chunk的分片数 //chunk:当前上传的分片数 //chunks:总分片数 if(chunks>1) { if(临时文件不存在) { //保存分片文件,并把数据插入到数据库 } else { if(tempchunk==chunk) { //保存分片文件,并把数据更新到数据库 } } } if(chunks>1&&chunk+1==chunks) { //合并临时文件并做数据库相关操作 } if(chunks==1) { //小文件上传 } } } }
4、处理多个文件上传时的问题
多个文件上传时,传递过来MD5数组。在遍历浏览器发送过来的文件时,需要获取MD5值,如果定义`public static int imd5 = 1;`,这个情况会有时出现第二次上传时文件无法上传的情况(可能是imd5还没有释放,其中imd5++的值还保留在imd5中),所以处理时需要获取文件的总个数filecount,就可以在进行文件合并时这么处理:
if (imd5 == filecount) { imd5 = 1; } else { imd5++; }
相关文章推荐
- iOS打包ipa安装包的流程
- android LruCache 原理 以及 源代码解析
- 解决Cocos2d点击电源键后游戏纹理失效
- HTML5下DOM元素在窗口中拖动(更改位置)
- js/jquery(2)
- Android 自定义密码框,密码+确认密码
- 将数据实体转换成字典集合
- Java杨辉三角的打印
- C++之IPC测试单元
- Android的OnTouch事件的处理机制
- C# ----- 算法之洗牌算法
- Java是解释型还是编译型
- Win7 OpenCV 3.0.0 VS2013 环境配置
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- 好吧,虽然我很渣,但是我想做出自己的东西
- 正则表达式和string对象的正则表达式
- 高德地图坐标转换问题
- iOS UIControl 事件的说明(转)
- 信息安全系统设计基础实验五:通讯协议设计
- 股票和债券的区别