<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>files upload</title>
<script src="http://apps.bdimg.com/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="upload.js"></script>
<script>
$(function () {
//var btn = $("#Button1");
var btn = $("#Button1").uploadFile({
url: "WebForm1.aspx",
fileSuffixs: ["jpg", "png", "gif", "txt","doc","docx"],
maximumFilesUpload: 10,//最大文件上傳數(shù)
onComplete: function (msg) {
$("#testdiv").append(msg + "<br/>");
},
onAllComplete: function () {
alert("全部上傳完成");
},
isGetFileSize: true,//是否獲取上傳文件大小阿趁,設(shè)置此項(xiàng)為true時(shí)醉冤,將在onChosen回調(diào)中返回文件fileSize和獲取大小時(shí)的錯(cuò)誤提示文本errorText
onChosen: function (file, obj, fileSize, errorText) {
if (!errorText) {
$("#file_size").text(file + "文件大小為:" + fileSize + "KB");
} else {
alert(errorText);
return false;
}
return true;//返回false將取消當(dāng)前選擇的文件
},
perviewElementId: "fileList", //設(shè)置預(yù)覽圖片的元素id
perviewImgStyle: { width: '100px', height: '100px', border: '1px solid #ebebeb' }//設(shè)置預(yù)覽圖片的樣式
});
var upload = btn.data("uploadFileData");
$("#files").click(function () {
upload.submitUpload();
});
});
</script>
</head>
<body>
<div id="file_size" style="width: 400px; border-bottom: 1px solid #C0C0C0;"></div>
<div style="width: 400px; height: 300px;">
<div style="font-size: 13px; font-weight:bold;color: #808080;font-family:'微軟雅黑','黑體','華文細(xì)黑';">對(duì)于上傳按鈕和選擇文件按鈕,你可以使用其他任何形式的元素,可以是圖片或一切你能想到的東西蘑辑,都是可以的</div>
<input id="Button1" type="button" value="選擇文件" />
<input id="files" type="button" value="上傳" />
<!-- <div style="width: 420px; height: 180px; overflow:auto;border:1px solid #C0C0C0;">-->
<div id="fileList" style="margin-top: 10px; padding-top:10px; font-size: 13px; width:400px">
</div>
<!-- </div>-->
</div>
<br/>
<div id="testdiv"></div>
</body>
</html>
對(duì)應(yīng)的js
/*
無刷新異步上傳插件
2017-12-20 Jbone Created
*/
(function ($) {
var defaultSettings = {
url: "", //上傳地址
buttonFeature: true, //true:點(diǎn)擊按鈕時(shí)僅選擇文件; false:選擇完文件后立即上傳
fileSuffixs: ["jpg", "png"], //允許上傳的文件后綴名列表
errorText: "不能上傳后綴為 {0} 的文件爸邢!", //錯(cuò)誤提示文本咏花,其中{0}將會(huì)被上傳文件的后綴名替換
onCheckUpload: function (text) { //上傳時(shí)檢查文件后綴名不包含在fileSuffixs屬性中時(shí)觸發(fā)的回調(diào)函數(shù),(text為錯(cuò)誤提示文本)
alert(text);
},
onComplete: function (msg) { //上傳完成后的回調(diào)函數(shù)[不管成功或失敗疙驾,它都將被觸發(fā)](msg為服務(wù)端的返回字符串)
},
onAllComplete: function () {
},//全部文件上傳完成觸發(fā)的事件
onChosen: function (file, obj, fileSize, errorText) { //選擇文件后的回調(diào)函數(shù)凶伙,(file為選中文件的本地路徑;obj為當(dāng)前的上傳控件實(shí)例;fileSize為當(dāng)前文件的大小,errorText為獲取文件大小時(shí)的錯(cuò)誤提示文本)
//alert(file);
return true;//在此回調(diào)中返回false將取消當(dāng)前選擇的文件
},
maximumFilesUpload: 5,//最大文件選擇數(shù)(當(dāng)此屬性大于1時(shí),buttonFeature屬性只能為true)
submitFilesNum: 3,//最大提交上傳數(shù)(當(dāng)觸發(fā)submitUpload方法時(shí)它碎,文件上傳的個(gè)數(shù))
onSubmitHandle: function (uploadFileNumber) { //提交上傳時(shí)的回調(diào)函數(shù)函荣,uploadFileNumber為當(dāng)前上傳的文件數(shù)量
//在此回調(diào)中返回false上傳提交將被阻止
return true;
},
onSameFilesHandle: function (file) { //當(dāng)重復(fù)選擇相同的文件時(shí)觸發(fā)
//在此回調(diào)中返回false當(dāng)前選擇的文件將從上傳隊(duì)列中取消
return true;
},
isGetFileSize: false,//是否獲取文件大小,默認(rèn)為false
isSaveErrorFile: true,//是否保存上傳失敗的文件链韭,默認(rèn)true
perviewElementId: "",//用于預(yù)覽的元素id(請(qǐng)傳入一個(gè)div元素的id)
perviewImgStyle: null//用于設(shè)置圖片預(yù)覽時(shí)的樣式(可不設(shè)置偏竟,在不設(shè)置的情況下多文件上傳時(shí)只能顯示一張圖片),如{ width: '100px', height: '100px', border: '1px solid #ebebeb' }
};
$.fn.uploadFile = function (settings) {
settings = $.extend({}, defaultSettings, settings || {});
if (settings.perviewElementId) {
//設(shè)置圖片預(yù)覽元素的必須樣式
if (!settings.perviewImgStyle) {
var perviewImg = document.getElementById(settings.perviewElementId);
perviewImg.style.overflow = "hidden";
}
}
return this.each(function () {
var self = $(this);
var upload = new UploadAssist(settings);
upload.createIframe(this);
//綁定當(dāng)前按鈕點(diǎn)擊事件
self.bind("click", function (e) {
upload.chooseFile();
});
//將上傳輔助類的實(shí)例敞峭,存放到當(dāng)前對(duì)象中踊谋,方便外部獲取
self.data("uploadFileData", upload);
});
};
})(jQuery);
//上傳輔助類
function UploadAssist(settings) {
//保存設(shè)置
this.settings = settings;
//已選擇文件的路徑集合
this.choseFilePath = [];
//上傳錯(cuò)誤文件集合
this.uploadError = [];
//創(chuàng)建的iframe唯一名稱
this.iframeName = "upload" + this.getTimestamp();
//提交狀態(tài)
this.submitStatus = true;
//已經(jīng)上傳的文件數(shù)
this.uploadFilesNum = 0;
//上傳完成計(jì)數(shù)
this.uploadNum = 0;
//針對(duì)IE上傳獲取文件大小時(shí)的錯(cuò)誤提示文本
this.errorText = "請(qǐng)?jiān)O(shè)置瀏覽器一些參數(shù)后再上傳文件,方法如下(設(shè)置一次即可):\n請(qǐng)依次點(diǎn)擊瀏覽器菜單中的\n'工具->Internet選項(xiàng)->安全->可信站點(diǎn)->自定義級(jí)別'\n在彈出的自定義級(jí)別窗口中找到 'ActiveX控件和插件' 項(xiàng)旋讹,將下面的子項(xiàng)全部選為 '啟用' 后殖蚕,點(diǎn)擊確定。\n此時(shí)不要關(guān)閉當(dāng)前窗口沉迹,再點(diǎn)擊 '站點(diǎn)' 按鈕睦疫,在彈出的窗口中將下面復(fù)選框的 '√' 去掉,然后點(diǎn)擊 '添加' 按鈕并關(guān)閉當(dāng)前窗口鞭呕。\n最后一路 '確定' 完成并刷新當(dāng)前頁面蛤育。";
return this;
}
UploadAssist.prototype = {
//輔助類構(gòu)造器
constructor: UploadAssist,
//創(chuàng)建iframe
createIframe: function (/*插件中指定的dom對(duì)象*/elem) {
var html = "<html>"
+ "<head>"
+ "<title>upload</title>"
+ "<script>"
+ "function getDCMT(iframeName){return window.frames[iframeName].document;}"
+ "</" + "script>"
+ "</head>"
+ "<body>"
+ "</body>"
+ "</html>";
this.iframe = $("<iframe name='" + this.iframeName + "'></iframe>")[0];
this.iframe.style.width = "0px";
this.iframe.style.height = "0px";
this.iframe.style.border = "0px solid #fff";
this.iframe.style.margin = "0px";
elem.parentNode.insertBefore(this.iframe, elem);
var iframeDocument = this.getIframeContentDocument();
iframeDocument.write(html);
},
//獲取時(shí)間戳
getTimestamp: function () {
return (new Date()).valueOf();
},
//創(chuàng)建上傳控件到創(chuàng)建的iframe中
createInputFile: function () {
var that = this;
var dcmt = this.getIframeContentDocument();
var input = dcmt.createElement("input");
var randomNum = this.getTimestamp();
input.type = "file";
$(input).attr("name", "input" + randomNum);
$(input).attr("id", input.name);
input.onchange = function () {
//保存已經(jīng)選擇的文件路徑
that.choseFilePath.push({ "name": this.name, "value": this.value });
var fileSuf = this.value.substring(this.value.lastIndexOf(".") + 1);
//檢查是否為允許上傳的文件
if (!that.checkFileIsUpload(fileSuf, that.settings.fileSuffixs)) {
that.removeFile(this.name);
that.settings.onCheckUpload(that.settings.errorText.replace("{0}", fileSuf));
return;
}
var fileSize;
var errorTxt = null;
//是否獲取上傳文件大小
if (that.settings.isGetFileSize) {
fileSize = perviewImage.getFileSize(this, dcmt);
if (fileSize == "error") {
fileSize = 0;
errorTxt = that.errorText;
}
}
//選中后的回調(diào)
var chosenStatus = that.settings.onChosen(this.value, this, fileSize, errorTxt);
if (typeof chosenStatus === "boolean" && !chosenStatus) {
that.removeFile(this.name);
return;
}
if (that.checkFileIsExist(this.value)) {
var status = that.settings.onSameFilesHandle(this.value);
if (typeof status === "boolean" && !status) {
that.removeFile(this.name);
return;
}
}
//是否開啟了圖片預(yù)覽
if (that.settings.perviewElementId) {
if (!that.settings.perviewImgStyle) {
perviewImage.beginPerview(this, that.settings.perviewElementId, dcmt, fileSuf);
} else {
var ul = perviewImage.getPerviewRegion(that.settings.perviewElementId);
var main = perviewImage.createPreviewElement(this.name, this.value, that.settings.perviewImgStyle);
var li = document.createElement("li");
if ($.browser.msie) {
li.style.styleFloat = "left";
}
else {
li.style.cssFloat = "left";
}
li.style.margin = "5px";
li.appendChild(main);
ul.appendChild(li);
var div = $(main).children("div").get(0);
$(main).find("img[name]").hover(function () {
this.src = perviewImage.closeImg.after;
}, function () {
this.src = perviewImage.closeImg.before;
}).click(function () {
that.removeFile($(this).attr("name"));
$(this).parents("li").fadeOut(200, function () {
$(this).remove();
});
});
perviewImage.beginPerview(this, div, dcmt, fileSuf);
}
}
if (!that.settings.buttonFeature) {
that.submitUpload();
}
};
var formName = "form" + randomNum;
var form = $('<form method="post" target="iframe' + randomNum + '" enctype="multipart/form-data" action="' + that.settings.url + '" name="' + formName + '"></form>');
form.append(input);
$(dcmt.body).append($("<div></div>").append(form)
.append($("<iframe name='iframe" + randomNum + "'></iframe>").on("load", function () {
var dcmt1 = that.getInsideIframeContentDocument(this.name);
if (dcmt1.body.innerHTML) {
//開始上傳下一個(gè)文件
that.insideOperation();
that.uploadNum++;
//注意:上傳失敗的響應(yīng)文本默認(rèn)為"error"
var responseText = $(dcmt1.body).text();
if (responseText == "error" && that.settings.isSaveErrorFile) {
//保存上傳失敗的文件
that.uploadError.push(this.name.replace("iframe", "input"));
}
var obj = that.getObjectByName(this.name.replace("iframe", "input"));
if (obj) {
//是否開啟了預(yù)覽
if (that.settings.perviewElementId) {
var closeImg = $("#" + that.settings.perviewElementId).find("img[name='" + obj.name + "']");
closeImg.next().hide();
if (responseText !== "error") {
//對(duì)于上傳成功的文件,將它從預(yù)覽中刪除
closeImg.parents("li").fadeOut("slow", function () {
$(this).remove();
});
} else {
//上傳失敗的文件葫松,加亮顯示
closeImg.css("visibility", "visible").parents("li").css({
"border": "1px solid #ff9999",
"background-color": "#ffdddd"
});
}
}
}
if (that.settings.onComplete) {
that.settings.onComplete(dcmt1.body.innerHTML);
}
if (that.uploadNum == that.uploadFilesNum) {
that.submitStatus = true;
that.clearUploadQueue();
that.uploadFilesNum = 0;
that.uploadNum = 0;
that.settings.onAllComplete();
}
dcmt1.body.innerHTML = "";
}
})));
return input;
},
//獲取創(chuàng)建的iframe中的document對(duì)象
getIframeContentDocument: function () {
return this.iframe.contentDocument || this.iframe.contentWindow.document;
},
//獲取創(chuàng)建的iframe所在的window對(duì)象
getIframeWindow: function () {
return this.iframe.contentWindow || this.iframe.contentDocument.parentWindow;
},
//獲取創(chuàng)建的iframe內(nèi)部iframe的document對(duì)象
getInsideIframeContentDocument: function (iframeName) {
return this.getIframeWindow().getDCMT(iframeName);
},
//獲取上傳input控件
getUploadInput: function () {
var inputs = this.getIframeContentDocument().getElementsByTagName("input");
var len = inputs.length;
if (len > 0) {
if (!inputs[len - 1].value) {
return inputs[len - 1];
} else {
return this.createInputFile();
}
}
return this.createInputFile();
},
//forEach迭代函數(shù)
forEach: function (/*數(shù)組*/arr, /*代理函數(shù)*/fn) {
var len = arr.length;
for (var i = 0; i < len; i++) {
var tmp = arr[i];
if (fn.call(tmp, i, tmp) == false) {
break;
}
}
},
//提交上傳
submitUpload: function () {
var status = this.settings.onSubmitHandle(this.choseFilePath.length);
if (typeof status === "boolean") {
if (!status) {
return;
}
}
this.clearedNotChooseFile();
var sbmtNum = this.settings.submitFilesNum;
var len = this.choseFilePath.length;
var dcmt = this.getIframeContentDocument();
var that = this;
if (!len) return;
if (!this.submitStatus) return;
this.filesNum = len;
//設(shè)置有效上傳數(shù)量瓦糕,有可能選擇的文件小于設(shè)置的提交數(shù)量
var advisableSubmitNum = sbmtNum < len ? sbmtNum : len;
this.uploadFilesNum = advisableSubmitNum;
this.submitStatus = false;
for (var i = 0; i < advisableSubmitNum; i++) {
(function (n) {
var time = (n + 1) * 500;
window.setTimeout(function () {
var obj = that.choseFilePath[n];
var formName = obj.name.replace("input", "form");
that.forEach(dcmt.forms, function () {
if (this.name == formName) {
this.submit();
return false;
}
});
if (that.settings.perviewElementId) {
//用于設(shè)置上傳loading圖片顯示
var imgclose = $("#" + that.settings.perviewElementId).find("img[name='" + obj.name + "']");
imgclose.next().show();
imgclose.css("visibility", "hidden");
}
}, time);
})(i);
}
},
//內(nèi)部提交操作,外部不能調(diào)用
insideOperation: function () {
var len = this.choseFilePath.length;
var dcmt = this.getIframeContentDocument();
var that = this;
if (!len) return;
var obj = this.choseFilePath[this.uploadFilesNum];
if (obj && obj.name) {
this.uploadFilesNum++;
(function (o) {
window.setTimeout(function () {
var formName = o.name.replace("input", "form");
that.forEach(dcmt.forms, function (i) {
if (this.name == formName) {
this.submit();
return false;
}
});
if (that.settings.perviewElementId) {
//用于設(shè)置上傳loading圖片顯示
var imgclose = $("#" + that.settings.perviewElementId).find("img[name='" + o.name + "']");
imgclose.next().show();
imgclose.css("visibility", "hidden");
}
}, 300);
})(obj);
}
},
//檢查文件是否可以上傳
checkFileIsUpload: function (fileSuf, suffixs) {
var status = false;
this.forEach(suffixs, function (i, n) {
if (fileSuf.toLowerCase() === n.toLowerCase()) {
status = true;
return false;
}
});
return status;
},
//檢查上傳的文件是否已經(jīng)存在上傳隊(duì)列中
checkFileIsExist: function (/*當(dāng)前上傳的文件*/file) {
var status = false;
this.forEach(this.choseFilePath, function (i, n) {
if (n.value == file) {
status = true;
return false;
}
});
return status;
},
//清除未選擇文件的上傳控件
clearedNotChooseFile: function () {
var files = this.getIframeContentDocument().getElementsByTagName("input");
this.forEach(files, function (i, n) {
if (!n.value) {
var div = n.parentNode.parentNode;
div.parentNode.removeChild(div);
return false;
}
});
},
//將指定上傳的文件從上傳隊(duì)列中刪除
removeFile: function (name) {
var that = this;
var files = this.getIframeContentDocument().getElementsByTagName("input");
this.forEach(this.choseFilePath, function (i, n) {
if (n.name == name) {
that.forEach(files, function (j, m) {
if (m.name == n.name) {
var div = m.parentNode.parentNode;
div.parentNode.removeChild(div);
return false;
}
});
that.choseFilePath.splice(i, 1);
return false;
}
});
},
//獲取選擇的上傳文件對(duì)象
getObjectByName: function (name) {
var obj, that = this;
this.forEach(this.choseFilePath, function (i) {
if (this.name === name) {
obj = that.choseFilePath[i];
return false;
}
});
return obj;
},
//清空上傳隊(duì)列
clearUploadQueue: function () {
var len = this.uploadError.length;
var that = this;
if (!len) {
this.choseFilePath.length = 0;
this.getIframeContentDocument().body.innerHTML = "";
} else {
var errorFiles = this.uploadError.join();
var newArr = this.choseFilePath.slice(0);
this.forEach(newArr, function () {
if (errorFiles.indexOf(this.name) == -1) {
that.removeFile(this.name);
}
});
}
this.uploadError.length = 0;
},
//選擇上傳文件
chooseFile: function () {
var uploadfile;
if (!this.choseFilePath.length && this.settings.perviewElementId) {
$("#" + this.settings.perviewElementId).find("ul").empty();
}
if (this.choseFilePath.length == this.settings.maximumFilesUpload) {
if (this.settings.maximumFilesUpload <= 1) {
this.choseFilePath.length = 0;
var files = this.getIframeContentDocument().getElementsByTagName("input");
if (!files.length) {
uploadfile = this.getUploadInput();
$(uploadfile).click();
return;
} else {
uploadfile = files[0];
$(uploadfile).click();
return;
}
} else {
return;
}
}
uploadfile = this.getUploadInput();
$(uploadfile).click();
}
};
//圖片預(yù)覽操作
var perviewImage = {
timers: [],
closeImg: {
before: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOVSURBVHjaYtTUdGdAA4K/fv3U+Pv3rw+QLfT//3+Gf//+vWNiYtjCwsJyAyj2HiT2//8/sGKAAGJB1gkU9Pj581eNnJyctaamMgM/Py8DIyMDw+fPXxlu3rxfdfPmjaPMzIwtTEzMO2B6AAKIBaH5fw4LC1tHeHgQt7u7PYOOjhIDNzcb2IBfv/4x3LjxiGHr1n3WK1duXPPx45sKJiamKSB9AAHECPIC0GZ3ZmbWzQkJkazu7rYMLCyMDD9//gYZCzWcgYGVlRUozsxw9Oh5hv7+Gb8/fXrnC+TvBAggZhERZb7fv3/PdnCwV7C3twT69w+DlpYcw5s3HxkeP34FdP53IPsDg6qqNAMXFxvQIA4GoGXMFy9eVgK6eg1AADH9/ftbW0hIxEpFRQms0MBAlYGDg51BQ0OegZ2dneH58zdAMRUGKSlhBnFxQYY7dx4CvfSHQVBQyAqkFyCAmIWEFDOlpaVtgQHH8O7dB4aXLz8wqKjIMHBysoE1SUqKMCgoSIC90te3lGHNmu0MDx8+Yfjx4xvQmz9eAgQQCzAwhBiBIfX69RugwC+GR4+eAl3yliEx0Y+Bl5eDQU5ODBwG3d0LGdau3QH0AjMwLFiBruQEBjCTEEAAsYBC+du3HwxPnjxnAMY90JCfoLBlePXqLdAAabDNX778AHvl37+/QP9DYubfP0haAAggJlAi+fr1M8Pbt2+Bml4z8PBwMxQURDMoK0uDbf78+QfYJY2N2Qy2thZA//8CGsIMtOg70MI/7wACiAkYkluAfmH48+cPMOHwMbS1FTJoaspB/bwYqHE6w4cP3xn4+DgYWltzgAGqywCMNbABQBdsAQggJmAsX/3+/esxkPNAoX7jxgNQomKYMWMtw65dRxkuXLjGMHHiEobv338x3Lv3DEhDLAO6+hjQq1cBAohRWdkOqOGvOwcHz2Z1dU1WcXEJBgkJYYbbtx+AExIogH/9+s2gra0KDOgPwLTxmOHKlfO/v3z55AtM0jsBAggYjfKg0Lz769eP958/f7FnZ2djAyYUBhERQWBUcgLDhItBWFiY4f37j8AYeshw/frVr1++fCwFal4O8iZAAIENAKdpRoZTwLg99/Llc8VPnz7JffnyFWQwMAa+Mdy/fw+YmW4w3Lp1/eiPH19zgJqXwfIQQACBvQDNiaBsC/K/IDCQNICKfNjYWIVAYQNMH++AIb4FGPrg7IycgwECDADIUZC5UWvTuwAAAABJRU5ErkJggg==",
after: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1wwbFhkQHxvdFgAAArpJREFUeNplz1to1QUAx/HP/3/O2c7OrudsR8vmamOL2hw5LaQHgxKCLvQSRVgPFhJKo4cyMsmxKNQgfOuhfKxICQTpocvAIFhai/WSTNIcnK3pbu12tnO2cwsfbZ+H3+MXfgGbfURDgn0xHgiIFskUuPgOE/7njsBxahsYqAnDN1p3765N9/QIYzGL4+Myw8PlbC53fp23j5HZFBhgSxPft27f3tfX36+ure2O+sbKiitnzrg2MjK/xjNH+RUCeJbo41xsSyb3PtR/WLQuLhIGVAJKlEsUSyUBrp8966+xsdkl+o7zTwiP8mqSvffu6ZMLs+565YAVWRvL1xSWrpufvmHr/v3y1dVu30pHIuk4pxCEiCQ4nIyEYk15heakmm3bdR06Zrq0LjM3ruPNI+o7O8V7uy1NTkjV10vw4ns0Rw6Q7uCTdLwS1LfMyM+Mytxa0r73aVse2adp52Oau7pd/eGCq4MHNUxPKc4sy1dEylwOt3FPNUH09gTrWhILSr+d9N3pQfGGpHRXjz9/+tHoqRe0t8yqasyK1lKNKlrDdYpVCEqUixRLLBZTep98DkD7zofFO3pVGqlqJlJDDDEK4TkmQlbXc+QWGZ9P2TMwpHXHLpnL541+dVRtMuWp00NmGncpxCkUCLDGWDjJWp6LG0XmJtn6xOu2PrjLzUvn3fr6JdVXP3btmyNqGlN2vHbC/Dxry5SZ+pTfIyh3MN3Jyxt54cKVYYXVKZPn3peIFkTK5G5ckp34W+bLE7IjeWGOOT78gp8DQPwzBtt5dymkkqTmbuIpYnUEAblZsldIrLLB0AGeX2QlAEDD5xy7n7eWia2GlKsREhaIb9CEZS58wKFRplGJAGD9W36JMXwf9cmKdF1RIlGgrmS1zOU/GDjIyZv8iwoENguRQKqblnqiI8yUWUAWJQD4D4Cg/5i7WltRAAAAAElFTkSuQmCC"
},
loading: "data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7",
fileImg: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAEn0lEQVR4nO3aPY4cRQCG4QJt4IjIwV5phYwQlyEi8hEcEiFESgAXQBbHcYiILETASv5h/6Znequ73+dJOpnSfNErlVRfjDl+nPS/bN/vY4zfZo+o+HL2APjMqzHGN7NHVAgAWyQCz0QA2CoReAYCwJaJwMoEgK0TgRUJAHsgAisRAPZCBFYgAOyJCFzY1ewBD3g/xng3ewSruD7j7Kvbr8dCF7DlALwbY/wwewSreDPGeHHGeRG4EFcA9sp14AIEgD0TgTMJAHsnAmcQAI5ABBYSAI5CBBYQALbqnwVnROBEAsBW/TXG+GXBORE4gQCwZX+MMX5ecE4EnkgA2Lq3QwRWIwDsgQisRADYCxFYgQCwJyJwYQLA3pwTgW8vvGX3BIA9WhqBr4cIfEIA2CsRuAABYM9E4EwCwN6JwBkEgCMQgYUEgKMQgQUEgCMRgRMJAEcjAicQAI5IBJ5IADgqEXgCAeDIROARAsDRvR1j/LTgXCICAkDBn0ME7iQAVIjAHQSAEhH4jABQIwIfEQCKROCWAFAlAkMAaMtHQACoS0dAACAcAQGA/yQjIADwQS4CAgCfSkVAAOD/MhEQALhbIgICAPc7fAQEAB526AgIADzusBEQAHiaQ0ZAAODpDhcBAYDTnBOB7y685WwCAKdbGoGbsbEICAAsc4gICAAst/sIXM0eAPf4aozxZvaIFd3cfn+dOUIA2LIXswesbHoEXAFgrqnXAQGA+W4e/8k6BADCBADCBADCBADCBADCvANghr9nD3hGm37LIADM8P3sAc/o9RjjevaI+7gCQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQJgAQNjV7AEPeDnGeD17BJzp5ewBD9lyAK7GGNezR8CRuQJAmABAmABAmABAmABAmABAmABAmABA2L+QtW4QG9di8wAAAABJRU5ErkJggg==",
//獲取預(yù)覽元素
getElementObject: function (elem) {
if (elem.nodeType && elem.nodeType === 1) {
return elem;
} else {
return document.getElementById(elem);
}
},
//開始圖片預(yù)覽
beginPerview: function (/*文件上傳控件實(shí)例*/file, /*需要顯示的元素id或元素實(shí)例*/perviewElemId,/*上傳頁面所在的document對(duì)象*/ dcmt,/*文件后綴名*/ fileSuf) {
var imgSufs = ",jpg,jpeg,bmp,png,gif,";
var isImage = imgSufs.indexOf("," + fileSuf.toLowerCase() + ",") > -1;//檢查是否為圖片
if (isImage) {
this.imageOperation(file, perviewElemId, dcmt);
} else {
this.fileOperation(perviewElemId, fileSuf);
}
},
//一般文件顯示操作
fileOperation: function (/*需要顯示的元素id或元素實(shí)例*/perviewElemId,/*文件后綴名*/ fileSuf) {
var preview_div = this.getElementObject(perviewElemId);
var MAXWIDTH = preview_div.clientWidth;
var MAXHEIGHT = preview_div.clientHeight;
var img = document.createElement("img");
preview_div.appendChild(img);
img.style.visibility = "hidden";
img.src = this.fileImg;
img.onload = function () {
var rect = perviewImage.clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
img.style.width = rect.width + 'px';
img.style.height = rect.height + 'px';
img.style.marginLeft = rect.left + 'px';
img.style.marginTop = rect.top + 'px';
img.style.visibility = "visible";
}
var txtTop = 0 - (MAXHEIGHT * 2 / 3);
$('<div style="text-align:center; position:relative; z-index:100; color:#404040;font: 13px/27px Arial,sans-serif;"></div>')
.text(fileSuf + "文件").css("top", txtTop + "px").appendTo(preview_div);
},
//圖片預(yù)覽操作
imageOperation: function (/*文件上傳控件實(shí)例*/file, /*需要顯示的元素id或元素實(shí)例*/perviewElemId,/*上傳頁面所在的document對(duì)象*/ dcmt) {
for (var t = 0; t < this.timers.length; t++) {
window.clearInterval(this.timers[t]);
}
this.timers.length = 0;
var preview_div = this.getElementObject(perviewElemId);
var MAXWIDTH = preview_div.clientWidth;
var MAXHEIGHT = preview_div.clientHeight;
if (file.files && file.files[0]) { //此處為Firefox腋么,Chrome以及IE10的操作
preview_div.innerHTML = "";
var img = document.createElement("img");
preview_div.appendChild(img);
img.style.visibility = "hidden";
img.onload = function () {
var rect = perviewImage.clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
img.style.width = rect.width + 'px';
img.style.height = rect.height + 'px';
img.style.marginLeft = rect.left + 'px';
img.style.marginTop = rect.top + 'px';
img.style.visibility = "visible";
}
var reader = new FileReader();
reader.onload = function (evt) {
img.src = evt.target.result;
}
reader.readAsDataURL(file.files[0]);
}
else {//此處為IE6咕娄,7,8珊擂,9的操作
file.select();
var src = dcmt.selection.createRange().text;
var div_sFilter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + src + "')";
var img_sFilter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='image',src='" + src + "')";
preview_div.innerHTML = "";
var img = document.createElement("div");
preview_div.appendChild(img);
img.style.filter = img_sFilter;
img.style.visibility = "hidden";
img.style.width = "100%";
img.style.height = "100%";
function setImageDisplay() {
var rect = perviewImage.clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
preview_div.innerHTML = "";
var div = document.createElement("div");
div.style.width = rect.width + 'px';
div.style.height = rect.height + 'px';
div.style.marginLeft = rect.left + 'px';
div.style.marginTop = rect.top + 'px';
div.style.filter = div_sFilter;
preview_div.appendChild(div);
}
//圖片加載計(jì)數(shù)
var tally = 0;
var timer = window.setInterval(function () {
if (img.offsetHeight != MAXHEIGHT) {
window.clearInterval(timer);
setImageDisplay();
} else {
tally++;
}
//如果超過兩秒鐘圖片還不能加載圣勒,就停止當(dāng)前的輪詢
if (tally > 20) {
window.clearInterval(timer);
setImageDisplay();
}
}, 100);
this.timers.push(timer);
}
},
//按比例縮放圖片
clacImgZoomParam: function (maxWidth, maxHeight, width, height) {
var param = { width: width, height: height };
if (width > maxWidth || height > maxHeight) {
var rateWidth = width / maxWidth;
var rateHeight = height / maxHeight;
if (rateWidth > rateHeight) {
param.width = maxWidth;
param.height = Math.round(height / rateWidth);
} else {
param.width = Math.round(width / rateHeight);
param.height = maxHeight;
}
}
param.left = Math.round((maxWidth - param.width) / 2);
param.top = Math.round((maxHeight - param.height) / 2);
return param;
},
//創(chuàng)建圖片預(yù)覽元素
createPreviewElement: function (/*關(guān)閉圖片名稱*/name,/*上傳時(shí)的文件名*/file, /*預(yù)覽時(shí)的樣式*/style) {
var img = document.createElement("div");
img.title = file;
img.style.overflow = "hidden";
for (var s in style) {
img.style[s] = style[s];
}
var text = document.createElement("div");
text.style.width = style.width;
text.style.overflow = "hidden";
text.style.textOverflow = "ellipsis";
text.style.whiteSpace = "nowrap";
text.innerHTML = file;
var top = 0 - window.parseInt(style.width) - 15;
var right = 0 - window.parseInt(style.width) + 14;
var close = document.createElement("img");
close.setAttribute("name", name);
close.src = this.closeImg.before;
close.style.position = "relative";
close.style.top = top + "px";
close.style.right = right + "px";
close.style.cursor = "pointer";
var loadtop = (0 - window.parseInt(style.height)) / 2 - 26;
var loadright = (0 - window.parseInt(style.width)) / 2 + 22;
var imgloading = document.createElement("img");
imgloading.src = this.loading;
imgloading.style.position = "relative";
imgloading.style.top = loadtop + "px";
imgloading.style.right = loadright + "px";
imgloading.style.display = "none";
var main = document.createElement("div");
main.appendChild(img);
main.appendChild(text);
main.appendChild(close);
main.appendChild(imgloading);
return main;
},
//獲取預(yù)覽區(qū)域
getPerviewRegion: function (elem) {
var perview = $(this.getElementObject(elem));
if (!perview.find("ul").length) {
var ul = document.createElement("ul");
ul.style.listStyleType = "none";
ul.style.margin = "0px";
ul.style.padding = "0px";
var div = document.createElement("div");
div.style.clear = "both";
perview.append(ul).append(div);
return ul;
} else {
return perview.children("ul").get(0);
}
},
//獲取上傳文件大小
getFileSize: function (/*上傳控件dom對(duì)象*/file, /*上傳控件所在的document對(duì)象*/dcmt) {
var fileSize;
if (file.files && file.files[0]) {
fileSize = file.files[0].size;
} else {
file.select();
var src = dcmt.selection.createRange().text;
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fileObj = fso.getFile(src);
fileSize = fileObj.size;
} catch (e) {
return "error";
}
}
fileSize = ((fileSize / 1024) + "").split(".")[0];
return fileSize;
}
}