| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- var splitUpload = (function(){
- /**
- * 分割上传其中一块
- * @param {[type]} file [文件Flie对象]
- * @param {[type]} totalSize [总大小]
- * @param {[type]} eachSize [每次大小]
- * @param {[type]} SucCallback [成功回调]
- * 回调参数
- * @param thunkTo [已上传大小]
- * @param totalSize [总大小]
- * @param {[type]} ErrCallback [失败回调]
- * 回调参数
- * @param res [ajax回调的response]
- * @param {[type]} count [上传的次数]
- * @param {[type]} counts [上传的总次数]
- * @param {[string]} uploadLink [上传链接] 默认
- */
- function loop(file, totalSize, eachSize, SucCallback, ErrCallback, count, counts, uploadLink){
- var thunkFrom = count * eachSize;// 切割起始端
- var thunkTo = (count + 1) * eachSize > totalSize ? totalSize : (count + 1) * eachSize;// 切割末端
- fd = new FormData();
- fd.append('theFile', file.slice(thunkFrom, thunkTo)); // 分好段的文件
- fd.append('fileName', file.name); // 文件名
- fd.append('totalSize', totalSize); // 大小
- fd.append('isFirstChunk', count === 0); // 是否第一次上传
- fd.append('isLastChunk', count === counts - 1); // 是否最后一次上传
- var xhr = new XMLHttpRequest();
- xhr.open("post", uploadLink, true);
- xhr.onreadystatechange = function () {
- if(xhr.readyState==4 && xhr.status==200){
- var rs = JSON.parse(xhr.responseText);
- if(rs.status == 200){
- SucCallback(thunkTo, totalSize)
- // isLastChunk
- if(count === counts - 1){
- return;
- }
- // 继续上传
- loop(file, totalSize, eachSize, SucCallback, ErrCallback, ++count, counts, uploadLink)
- }else{
- ErrCallback(rs)
- }
- }
- };
- xhr.send(fd);
- }
- /**
- * 分割上传
- * @param {[type]} file [文件Flie对象]
- * @param {[function]} SucCallback [成功回调]
- * @param {[function]} ErrCallback [失败回调]
- * @param {[string]} uploadLink [上传链接] default
- */
- return function(file, SucCallback, ErrCallback, uploadLink) {
- uploadLink = uploadLink || '/upload';
- var totalSize = file.size; // 总大小
- var eachSize = 1024 * 1000; // 每次上传大小 这里是100kb
- var counts = Math.ceil(totalSize / eachSize); // 上传的总次数
- loop(file, totalSize, eachSize, SucCallback, ErrCallback, 0, counts, uploadLink)
- //test
- /*size > 1024
- ? size / 1024 > 1024
- ? size / (1024 * 1024) > 1024
- ? (size / (1024 * 1024 * 1024)).toFixed(2) + 'GB'
- : (size / (1024 * 1024)).toFixed(2) + 'MB'
- : (size / 1024).toFixed(2) + 'KB'
- : (size).toFixed(2) + 'B';*/
- })();
|