/*
*/
var slice_upload = {
fileInput: null, //html file控件
fileFilter: [], //過濾后的文件數(shù)組
url: '', //ajax地址
nSlice_count: 100, //分段數(shù)
nFactCount: null, //實際分段數(shù)
nMin_size: 0.5, //最小分段大小(M)
nMax_size: 5, //最大分段大小(M),
totalSize: 0, //文件總大小,
uploadSize: 0, //已上傳大小
error: 0,
fdata: '', //上傳文件附加的信息,
timeout: 60000, //超時時間毫秒,
errormsg: '',
filter: function (files) { //選擇文件組的過濾方法
return files;
},
current_upload: 0, //當前上傳的文件索引
onFailure: function () {}, //上傳失敗時
onDelete: function () {}, //文件刪除后
onSelect: function () {}, //文件選擇后
onPause: function () {}, //文件暫停后
formData: {},
//獲取選擇文件,file控件或拖放
funGetFiles: function (e) {
// 獲取文件列表對象
var files = e.target.files || e.dataTransfer.files;
//繼續(xù)添加文件
files = this.filter(files);
for (var i = 0; i < files.length; i++) {
this.fileFilter.push(files[i]);
}
this.funDealFiles();
return this;
},
//選中文件的處理與回調(diào)
funDealFiles: function () {
this.totalSize = 0;
for (var i = 0, file; i < this.fileFilter.length; i++) {
file = this.fileFilter[i];
//增加唯一索引值
file.index = i;
this.totalSize += file.size;
file.upSize = 0;
file.content = '';
file.pause = false;//是否暫停
file.end_upload = false;//是否已經(jīng)上傳完成
if (file.hasOwnProperty('nCountNum') == false) {
//分段設(shè)置
file.nCountNum = 0;
file.nFactSize = file.size / this.nSlice_count;
file.nFactSize = (file.nFactSize >= this.nMin_size * 1024 * 1024 ? file.nFactSize : this.nMin_size * 1024 * 1024);
file.nFactSize = (file.nFactSize <= this.nMax_size * 1024 * 1024 ? file.nFactSize : this.nMax_size * 1024 * 1024);
file.nFactCount = Math.ceil(file.size / file.nFactSize);
file.complete = 0;
}
}
this.onSelect(this.fileFilter);
return this;
},
//刪除對應的文件
funDeleteFile: function (fileDelete) {
var arrFile = [];
for (var i = 0, file; i < this.fileFilter.length; i++) {
file = this.fileFilter[i];
if (file != fileDelete) {
arrFile.push(file);
} else {
this.totalSize = this.totalSize - file.size;
this.onDelete(fileDelete);
}
}
this.fileFilter = arrFile;
return this;
},
onProgress: function () {},
uploadfile: function () {
this.uploadone(this.fileFilter[0]);
},
init: function () {
var self = this;
//文件選擇控件選擇
if (this.fileInput) {
this.fileInput.addEventListener("change", function (e) {
self.funGetFiles(e);
}, false);
}
},
uploadone: function (file) {
if (file.pause == true && file.index == this.current_upload) {
return;
}
if (file.end_upload == true) {
if (typeof (this.fileFilter[file.index + 1]) !== 'undefined') {
this.current_upload = file.index + 1;
this.uploadone(this.fileFilter[file.index + 1]);
}
return;
}
var fData = new FormData();
var self = this;
//分段設(shè)置
var start = file.nCountNum * file.nFactSize;
var end = Math.min(start + file.nFactSize, file.size);
fData.append("file", file.slice(start, end));
fData.append("name", file.name);
fData.append("size", file.size);
fData.append("totalCount", file.nFactCount);
fData.append("indexCount", file.nCountNum);
fData.append("content", file.content);
for (var i in self.formData) {
fData.append(i, self.formData[i]);
}
var xhr = new XMLHttpRequest();
t1 = setTimeout(function () {
self.errormsg = '超時了';
xhr.abort();
return false;
}, self.timeout);
// 文件上傳成功或是失敗
xhr.onreadystatechange = function (e) {
if (xhr.readyState == 4) {
if (t1) {
clearTimeout(t1);
}
if (xhr.responseText) {
var res = JSON.parse(xhr.responseText);
if (xhr.status != 200 || res.status == 0) {
self.error = 1;
self.onFailure(res.msg);
self.funPause(file);
return false;
}
}
}
};
xhr.addEventListener("progress", function (e) {
// self.onProgress(file, e);
}, false);
xhr.addEventListener("load", function (e) {
self.onLoad(file, e);
}, false);
xhr.addEventListener("error", function () {
self.onFailure('上傳出錯'); //上傳出錯
self.funPause(file);
}, false);
xhr.addEventListener("abort", function () {
if (self.errormsg) {
var msg = self.errormsg;
} else {
var msg = '上傳出錯';
}
self.onFailure(msg); //上傳出錯
self.funPause(file);
}, false);
if (self.url.indexOf('?') >= 0) {
var url = self.url + '&rand=' + Math.random();
} else {
var url = self.url + '?rand=' + Math.random();
}
xhr.open("POST", url, true);
xhr.send(fData);
},
onLoad: function (file, e) {
if(this.error == 1){
return false;
};
var res = JSON.parse(e.target.responseText);
var upSize = (file.nCountNum + 1) * file.nFactSize;
upSize = upSize > file.size ? file.size : upSize;
file.upSize = upSize;
this.uploadSize += file.upSize;
this.uploadSize = this.uploadSize > this.totalSize ? this.totalSize : this.uploadSize;
this.onProgress(file, e, res);
if (file.nCountNum + 1 != file.nFactCount)
{
if (res.status == 1) {
//分段沒有完成,繼續(xù)上傳
file.nCountNum++;
this.uploadone(file);
return;
}
if (res.status == 0) {
// this.onFailure(res.msg);
return false;
}
} else {
//分段上傳完成
if (res.status == 0) {
// this.onFailure(res.msg);
return false;
}
file.end_upload = true;
if (typeof (this.fileFilter[file.index + 1]) !== 'undefined') {
this.current_upload = file.index + 1;
this.uploadone(this.fileFilter[file.index + 1]);
return;
}
var self = this;
if (this.uploadSize == this.totalSize) {
setTimeout(function () {
self.onComplete();
}, 500);
}
}
},
funPause: function (file) {
file.pause = true;//是否暫停
this.onPause(file);
}
};
這是文件分段的js
后臺處理就是普通的讀上傳到的文件塊然后通過追加的方式來進行完整的文件合并
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。