/*
*/
var slice_upload = {
fileInput: null, //html file控件
fileFilter: [], //過(guò)濾后的文件數(shù)組
url: '', //ajax地址
nSlice_count: 100, //分段數(shù)
nFactCount: null, //實(shí)際分段數(shù)
nMin_size: 0.5, //最小分段大小(M)
nMax_size: 5, //最大分段大小(M),
totalSize: 0, //文件總大小,
uploadSize: 0, //已上傳大小
error: 0,
fdata: '', //上傳文件附加的信息,
timeout: 60000, //超時(shí)時(shí)間毫秒,
errormsg: '',
filter: function (files) { //選擇文件組的過(guò)濾方法
return files;
},
current_upload: 0, //當(dāng)前上傳的文件索引
onFailure: function () {}, //上傳失敗時(shí)
onDelete: function () {}, //文件刪除后
onSelect: function () {}, //文件選擇后
onPause: function () {}, //文件暫停后
formData: {},
//獲取選擇文件,file控件或拖放
funGetFiles: function (e) {
// 獲取文件列表對(duì)象
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;
},
//刪除對(duì)應(yīng)的文件
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 = '超時(shí)了';
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('上傳出錯(cuò)'); //上傳出錯(cuò)
self.funPause(file);
}, false);
xhr.addEventListener("abort", function () {
if (self.errormsg) {
var msg = self.errormsg;
} else {
var msg = '上傳出錯(cuò)';
}
self.onFailure(msg); //上傳出錯(cuò)
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) {
//分段沒(méi)有完成,繼續(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
后臺(tái)處理就是普通的讀上傳到的文件塊然后通過(guò)追加的方式來(lái)進(jìn)行完整的文件合并
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。