$.fn.extend({
"initupload": function(opt) {
if (typeof opt != "object") { alert('参数错误!'); return; }
var uploadid = $(this).attr("id");
// if (uploadid == null || uploadid == "") { alert("要设定一个id!"); }
$.each(uploadtools.getinitoption(uploadid), function(key, value) { if (opt[key] == null) { opt[key] = value; } });
uploadtools.flushopt(opt);
uploadtools.initwithlayout(opt);
uploadtools.initwithdrag(opt);
uploadtools.initwithselectfile(opt);
uploadtools.initwithupload(opt);
uploadtools.initwithcleanfile(opt);
uploadfilelist.initfilelist(opt);
}
});
var uploadtools = {
"getinitoption": function(uploadid) { var initoption = { "uploadid": uploadid, "uploadurl": "#", "selfuploadbtid": "", "schedulestandard": false, "autocommit": false, "ishiddenuploadbt": false, "ishiddencleanbt": false, "isautoclean": false, "candrag": true, "velocity": 10, "filetype": "*", "size": "-1", "ismultiple": true, "filelsavepath": "", "beforeupload": function() {}, "onupload": function() {} }; return initoption; },
"initwithupload": function(opt) {
var uploadid = opt.uploadid;
if (!opt.ishiddenuploadbt) {
$("#" + uploadid + " .uploadbts .uploadfilebt").off();
$("#" + uploadid + " .uploadbts .uploadfilebt").on("click", function() { uploadevent.uploadfileevent(opt); });
$("#" + uploadid + " .uploadbts .uploadfilebt i").css("color", "#0099ff");
}
if (opt.selfuploadbtid != null && opt.selfuploadbtid != "") {
if (uploadtools.foundexitbyid(opt.selfuploadbtid)) {
$("#" + opt.selfuploadbtid).off();
$("#" + opt.selfuploadbtid).on("click", function() { uploadevent.uploadfileevent(opt); });
}
}
},
"foundexitbyid": function(id) { return $("#" + id).size() > 0; },
"initwithcleanfile": function(opt) {
var uploadid = opt.uploadid;
if (!opt.ishiddencleanbt) {
$("#" + uploadid + " .uploadbts .cleanfilebt").off();
$("#" + uploadid + " .uploadbts .cleanfilebt").on("click", function() { uploadevent.cleanfileevent(opt); });
$("#" + uploadid + " .uploadbts .cleanfilebt i").css("color", "#0099ff");
}
},
"initwithselectfile": function(opt) {
var uploadid = opt.uploadid;
$("#" + uploadid + " .uploadbts .selectfilebt").off();
$("#" + uploadid + " .uploadbts .selectfilebt").on("click", function() { uploadevent.selectfileevent(opt); });
},
"getshowfiletype": function(isimg, filetype, filename, isimgurl, filecodeid) {
var showtypestr = "
" + filetype + "
";
if (isimg) { if (isimgurl != null && isimgurl != "null" && isimgurl != "") { showtypestr = ""; } }
var modelstr = "";
modelstr += "";
modelstr += "
";
modelstr += showtypestr;
modelstr += "
";
modelstr += "
";
modelstr += "";
modelstr += "
";
modelstr += "
";
modelstr += filename;
modelstr += "
";
modelstr += "
";
return modelstr;
},
"initwithlayout": function(opt) {
var uploadid = opt.uploadid;
var btsstr = "";
btsstr += "";
btsstr += "
";
btsstr += "
请上传doc,docx,pdf格式
";
btsstr += "
";
if (!opt.ishiddenuploadbt) {
btsstr += "
";
btsstr += "";
btsstr += "
";
}
if (!opt.ishiddencleanbt) {
btsstr += "
";
btsstr += "";
btsstr += "
";
}
btsstr += "
";
$("#" + uploadid).append(btsstr);
var boxstr = "";
$("#" + uploadid).append(boxstr);
},
"initwithdrag": function(opt) { var candrag = opt.candrag; var uploadid = opt.uploadid; if (candrag) { $(document).on({ dragleave: function(e) { e.preventdefault(); }, drop: function(e) { e.preventdefault(); }, dragenter: function(e) { e.preventdefault(); }, dragover: function(e) { e.preventdefault(); } }); var box = $("#" + uploadid + " .box").get(0); if (box != null) { box.addeventlistener("drop", function(e) { uploadevent.draglistingevent(e, opt); }); } } },
"initwithdeletefile": function(opt) {
var uploadid = opt.uploadid;
$("#" + uploadid + " .fileitem .status i").off();
$("#" + uploadid + " .fileitem .status i").on("click", function() { uploadevent.deletefileevent(opt, this); })
},
"getsuffixnamebyfilename": function(filename) { var str = filename; var pos = str.lastindexof(".") + 1; var lastname = str.substring(pos, str.length); return lastname; },
"isinarray": function(strfound, arrays) {
var ishave = false;
for (var i = 0; i < arrays.length; i++) { if (strfound == arrays[i]) { ishave = true; break; } }
return ishave;
},
"fileisexit": function(file, opt) {
var filelist = uploadfilelist.getfilelist(opt);
var ishave = false;
for (var i = 0; i < filelist.length; i++) { if (filelist[i] != null && filelist[i].name == file.name && filelist[i].size == file.size) { ishave = true; } }
return ishave;
},
"addfilelist": function(filelist, opt) {
var uploadid = opt.uploadid;
var boxjsobj = $("#" + uploadid + " .box").get(0);
var filelistarray = uploadfilelist.getfilelist(opt);
var filenumber = uploadtools.getfilenumber(opt);
if (filenumber + filelist.length > opt.maxfilenumber) { alert("最多只能上传" + opt.maxfilenumber + "个文件"); return; }
var imgtest = /image\/(\w)*/;
var filetypearray = opt.filetype;
var filesizelimit = opt.size;
for (var i = 0; i < filelist.length; i++) {
if (uploadtools.fileisexit(filelist[i], opt)) { alert("文件(" + filelist[i].name + ")已经存在!"); continue; }
var filetypestr = uploadtools.getsuffixnamebyfilename(filelist[i].name);
if (filesizelimit != -1 && filelist[i].size > (filesizelimit * 1000)) { alert("文件(" + filelist[i].name + ")超出了大小限制!请控制在" + filesizelimit + "kb内"); continue; }
if (filetypearray == "*" || uploadtools.isinarray(filetypestr, filetypearray)) {
var filetypeupcasestr = filetypestr.touppercase();
if (imgtest.test(filelist[i].type)) {
var imgurlstr = "";
if (window.createobjecturl != undefined) { imgurlstr = window.createobjecturl(filelist[i]); } else if (window.url != undefined) { imgurlstr = window.url.createobjecturl(filelist[i]); } else if (window.webkiturl != undefined) { imgurlstr = window.webkiturl.createobjecturl(filelist[i]); }
var filemodel = uploadtools.getshowfiletype(true, filetypeupcasestr, filelist[i].name, imgurlstr, filelistarray.length);
$(boxjsobj).append(filemodel);
} else {
var filemodel = uploadtools.getshowfiletype(true, filetypeupcasestr, filelist[i].name, null, filelistarray.length);
$(boxjsobj).append(filemodel);
}
uploadtools.initwithdeletefile(opt);
filelistarray[filelistarray.length] = filelist[i];
} else { alert("不支持该格式文件上传:" + filelist[i].name); }
}
uploadfilelist.setfilelist(filelistarray, opt);
},
"cleanfilinputwithselectfile": function(opt) {
var uploadid = opt.uploadid;
$("#" + uploadid + "_file").remove();
},
"uploaderror": function(opt) {
var uploadid = opt.uploadid;
$("#" + uploadid + " .box .fileitem .status>i").addclass("iconfont icon-cha");
var progressbar = $("#" + uploadid + " .subberprogress .progress>div");
progressbar.css("width", "0%");
progressbar.html("0%");
},
"uploadsuccess": function(opt) {
var uploadid = opt.uploadid;
$("#" + uploadid + " .box .fileitem .status>i").off();
$("#" + uploadid + " .box .fileitem .status>i").addclass("iconfont icon-gou");
var progressbar = $("#" + uploadid + " .subberprogress .progress>div");
progressbar.css("width", "0%");
progressbar.html("0%");
},
"getfilesdataamount": function(opt) {
var filelist = uploadfilelist.getfilelist(opt);
var summer = 0;
for (var i = 0; i < filelist.length; i++) {
var fileitem = filelist[i];
if (fileitem != null)
summer = parsefloat(summer) + fileitem.size;
}
return summer;
},
"uploadfile": function(opt) {
var uploadurl = opt.uploadurl;
var filelist = uploadfilelist.getfilelist(opt);
var formdata = new formdata();
var filenumber = uploadtools.getfilenumber(opt);
if (filenumber <= 0) { alert("没有文件,不支持上传"); return; }
for (var i = 0; i < filelist.length; i++) { if (filelist[i] != null) { formdata.append("file", filelist[i]); } }
if (opt.otherdata != null && opt.otherdata != "") { for (var j = 0; j < opt.otherdata.length; j++) { formdata.append(opt.otherdata[j].name, opt.otherdata[j].value); } }
formdata.append("filelsavepath", opt.filelsavepath);
if (uploadurl != "#" && uploadurl != "") {
uploadtools.disablefileupload(opt);
uploadtools.disablecleanfile(opt);
$.ajax({
type: "post",
url: uploadurl,
data: formdata,
processdata: false,
contenttype: false,
success: function(data) {
uploadtools.initwithcleanfile(opt);
settimeout(function() { opt.onupload(opt, data) }, 500);
if (opt.isautoclean) { settimeout(function() { uploadevent.cleanfileevent(opt); }, 2000); }
},
error: function(e) {}
});
} else {
uploadtools.disablefileupload(opt);
uploadtools.disablecleanfile(opt);
}
if (opt.uploadurl == "#" || opt.uploadurl == "") { uploadtools.getfileuploadpregressmsg(opt); }
},
"getfileuploadpregressmsg": function(opt) {
var uploadid = opt.uploadid;
$("#" + uploadid + " .box .fileitem .status>i").removeclass();
if (opt.uploadurl == "#" || opt.uploadurl == "") {
if (opt.velocity == null || opt.velocity == "" || opt.velocity <= 0) { opt.velocity = 1; }
var filesdataamount = uploadtools.getfilesdataamount(opt);
var percent = 0;
var bytesread = 0;
var intervalid = setinterval(function() {
bytesread += 5000 * parsefloat(opt.velocity);
if (!opt.schedulestandard) {
percent = bytesread / filesdataamount * 100;
percent = percent.tofixed(2);
if (percent >= 100) {
clearinterval(intervalid);
percent = 100;
uploadtools.initwithcleanfile(opt);
uploadtools.uploadsuccess(opt);
}
} else {
percent += parsefloat(opt.velocity);
if (percent >= 100) {
clearinterval(intervalid);
percent = 100;
uploadtools.initwithcleanfile(opt);
uploadtools.uploadsuccess(opt);
}
}
}, 500);
}
},
"disablefileupload": function(opt) {
if (!opt.ishiddenuploadbt) {
var uploadid = opt.uploadid;
$("#" + uploadid + " .uploadbts .uploadfilebt").off();
$("#" + uploadid + " .uploadbts .uploadfilebt i").css("color", "#dddddd");
}
},
"disablecleanfile": function(opt) {
if (!opt.ishiddencleanbt) {
var uploadid = opt.uploadid;
$("#" + uploadid + " .uploadbts .cleanfilebt").off();
$("#" + uploadid + " .uploadbts .cleanfilebt i").css("color", "#dddddd");
}
},
"getfilenumber": function(opt) {
var number = 0;
var filelist = uploadfilelist.getfilelist(opt);
for (var i = 0; i < filelist.length; i++) { if (filelist[i] != null) { number++; } }
return number;
},
"flushopt": function(opt) {
var uploadid = opt.uploadid;
$("#" + uploadid).data("opt", opt);
},
"getopt": function(uploadid) { var opt = $("#" + uploadid).data("opt"); return opt; }
};
var uploadevent = {
"draglistingevent": function(e, opt) {
e.preventdefault();
var filelist = e.datatransfer.files;
uploadtools.addfilelist(filelist, opt);
if (opt.autocommit) { uploadevent.uploadfileevent(opt); }
},
"deletefileevent": function(opt, obj) {
var fileitem = $(obj).parent().parent();
var filecodeid = fileitem.attr("filecodeid");
var filelistarray = uploadfilelist.getfilelist(opt);
delete filelistarray[filecodeid];
uploadfilelist.setfilelist(filelistarray, opt);
fileitem.remove();
},
"selectfileevent": function(opt) {
var uploadid = opt.uploadid;
var ismultiple = opt.ismultiple;
var inputobj = document.createelement('input');
inputobj.setattribute('id', uploadid + '_file');
inputobj.setattribute('type', 'file');
inputobj.setattribute("style", 'visibility:hidden');
if (ismultiple) { inputobj.setattribute("multiple", "multiple"); }
$(inputobj).on("change", function() { uploadevent.selectfilechangeevent(this.files, opt); });
document.body.appendchild(inputobj);
inputobj.click();
},
"selectfilechangeevent": function(files, opt) {
uploadtools.addfilelist(files, opt);
uploadtools.cleanfilinputwithselectfile(opt);
if (opt.autocommit) { uploadevent.uploadfileevent(opt); }
},
"uploadfileevent": function(opt) {
uploadtools.flushopt(opt);
if (opt.beforeupload != null && (typeof opt.beforeupload === "function")) { opt.beforeupload(opt); }
uploadtools.uploadfile(opt);
},
"cleanfileevent": function(opt) {
var uploadid = opt.uploadid;
if (opt.showsummerprogress) {
$("#" + uploadid + " .subberprogress").css("display", "none");
$("#" + uploadid + " .subberprogress .progress>div").css("width", "0%");
$("#" + uploadid + " .subberprogress .progress>div").html("0%");
}
uploadtools.cleanfilinputwithselectfile(opt);
uploadfilelist.setfilelist([], opt);
$("#" + uploadid + " .box").html("");
uploadtools.initwithupload(opt);
}
};
var uploadfilelist = {
"initfilelist": function(opt) { opt.filelist = new array(); },
"getfilelist": function(opt) { return opt.filelist; },
"setfilelist": function(filelist, opt) {
opt.filelist = filelist;
uploadtools.flushopt(opt);
}
};
var formtake = {
"getdata": function(formid) {
var formdata = {};
var $form = $("#" + formid);
var input_doms = $form.find("input[name][ignore!='true'],textarea[name][ignore!='true']");
var select_doms = $form.find("select[name][ignore!='true']");
for (var i = 0; i < input_doms.length; i++) {
var inputitem = input_doms.eq(i);
var inputname = "";
if (inputitem.attr("type") == "radio") {
if (inputitem.is(":checked")) {
inputname = inputitem.attr("name");
formdata[inputname] = $.trim(inputitem.val());
}
} else {
inputname = inputitem.attr("name");
formdata[inputname] = $.trim(inputitem.val());
}
}
for (var j = 0; j < select_doms.length; j++) {
var selectitem = select_doms.eq(j);
var selectname = selectitem.attr("name");
formdata[selectname] = $.trim(selectitem.val());
}
return formdata;
},
"getdatawithuploadfile": function(formid) {
var formdata = [];
var $form = $("#" + formid);
var input_doms = $form.find("input[name][ignore!='true'],textarea[name][ignore!='true']");
var select_doms = $form.find("select[name][ignore!='true']");
for (var i = 0; i < input_doms.length; i++) {
var inputitem = input_doms.eq(i);
var inputname = "";
if (inputitem.attr("type") == "radio") {
if (inputitem.is(":checked")) {
inputname = inputitem.attr("name");
formdata[formdata.length] = { "name": inputname, "value": $.trim(inputitem.val()) }
}
} else {
inputname = inputitem.attr("name");
formdata[formdata.length] = { "name": inputname, "value": $.trim(inputitem.val()) }
}
}
for (var j = 0; j < select_doms.length; j++) {
var selectitem = select_doms.eq(j);
var selectname = selectitem.attr("name");
formdata[formdata.length] = { "name": selectname, "value": $.trim(selectitem.val()) }
}
return formdata;
}
};