強(qiáng)大的文件上傳

 <!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;  
    }  
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末费变,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子圣贸,更是在濱河造成了極大的恐慌挚歧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旁趟,死亡現(xiàn)場(chǎng)離奇詭異昼激,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锡搜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門橙困,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耕餐,你說我怎么就攤上這事凡傅。” “怎么了肠缔?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵夏跷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我明未,道長(zhǎng)槽华,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任趟妥,我火速辦了婚禮猫态,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘披摄。我一直安慰自己亲雪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布疚膊。 她就那樣靜靜地躺著义辕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寓盗。 梳的紋絲不亂的頭發(fā)上灌砖,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音傀蚌,去河邊找鬼基显。 笑死,一個(gè)胖子當(dāng)著我的面吹牛喳张,可吹牛的內(nèi)容都是我干的续镇。 我是一名探鬼主播美澳,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼销部,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼摸航!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舅桩,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤酱虎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后擂涛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體读串,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年撒妈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恢暖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狰右,死狀恐怖杰捂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棋蚌,我是刑警寧澤嫁佳,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谷暮,受9級(jí)特大地震影響蒿往,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜湿弦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一瓤漏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧省撑,春花似錦赌蔑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肥败,卻和暖如春趾浅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馒稍。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工皿哨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纽谒。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓证膨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親鼓黔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子央勒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355