$.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; } };