封装图片上传插件(用到html5技术)

来源:互联网 发布:ipad绿色上网软件 编辑:程序博客网 时间:2024/05/22 04:39
//js:
function ie6scroll(box, h, wbox_h) {    var box = box;//弹窗的div,例如.class/#id    window.onscroll = function () {        scrollT = $(document).scrollTop();//获取滚动条高度        var top = (h - wbox_h) / 2 + scrollT;        $(box).css("top", top + "px");    }}function wbox(box) {    var box = $(box);//弹窗的div,例如.class/#id    var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;//浏览器窗口宽度    var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;//浏览器窗口高度    var aw = document.body.scrollWidth;//网页正文宽度    var ah = document.body.scrollHeight;//网页正文高度    var scrollT = $(document).scrollTop();//获取滚动条高度    var wbox_w = $(box).innerWidth();//弹出框宽度    var wbox_h = $(box).innerHeight();//弹出框高度    var bg_w = w;    var bg_h = h;    var left = (w - wbox_w) / 2;    var top = (h - wbox_h) / 2 + scrollT;    if (ah > h) {        bg_w = aw;        bg_h = ah;    }    $(".wbox").css({ "top": top + "px", "left": left + "px" });    $(".wbox_bg").css({ "display": "block", "width": bg_w + "px", "height": bg_h + "px" });    $(box).css("display", "block");    ie6scroll(box, h, wbox_h);}function boxClose(box) {    var box = box;//弹窗的div,例如.class/#id    $(".wbox_bg").css("display", "none");    $(box).css("display", "none");}var FileUpload_Config = {    RequestUrl: "/Home/UploadFile",    ParamName: "file",    ProgressWidth: 400,    ProgressHeight: 50,    ProgressZIndex: 9999,    FileFormat: ["png", "jpeg", "jpg", "gif", "mp4"],    FileMaxSize: 10,    ImgCompressionEnable: true,    ProcessBackgroundImage: "./js/lib/FileUpload/bak.png",    ProgressImage: "./js/lib/FileUpload/pro.png",    OtherParams:{},    beforeStart: function () {    },    onStart: function () {    },    onComplete: function (responseText) {    },    onSuccess: function () {    },    onFailed: function (responseText) {    },    onError: function () {    }};var FileUpload = {    Init: function (cfg) {        if (cfg.id) {            var btn = document.getElementById(cfg.id);            if (btn.attachEvent)                btn.attachEvent('onclick', FileUpload.GoUpload);            else                btn.addEventListener('click', FileUpload.GoUpload);        }        FileUpload_Config.RequestUrl = cfg.RequestUrl || FileUpload_Config.RequestUrl;        FileUpload_Config.ParamName = cfg.ParamName || FileUpload_Config.ParamName;        FileUpload_Config.ProgressWidth = cfg.ProgressHeight || FileUpload_Config.ProgressWidth;        FileUpload_Config.ProgressHeight = cfg.ProgressHeight || FileUpload_Config.ProgressHeight;        FileUpload_Config.ProgressZIndex = cfg.ProgressZIndex || FileUpload_Config.ProgressZIndex;        FileUpload_Config.FileFormat = cfg.FileFormat || FileUpload_Config.FileFormat;        FileUpload_Config.FileMaxSize = cfg.FileMaxSize || FileUpload_Config.FileMaxSize;        FileUpload_Config.ImgCompressionEnable = cfg.ImgCompressionEnable || FileUpload_Config.ImgCompressionEnable;        FileUpload_Config.ProcessBackgroundImage = cfg.ProcessBackgroundImage || FileUpload_Config.ProcessBackgroundImage;        FileUpload_Config.ProgressImage = cfg.ProgressImage || FileUpload_Config.ProgressImage;        FileUpload_Config.OtherParams = cfg.OtherParams || FileUpload_Config.OtherParams;        FileUpload_Config.beforeStart = cfg.beforeStart || FileUpload_Config.beforeStart;        FileUpload_Config.onStart = cfg.onStart || FileUpload_Config.onStart;        FileUpload_Config.onComplete = cfg.onComplete || FileUpload_Config.onComplete;        FileUpload_Config.onSuccess = cfg.onSuccess || FileUpload_Config.onSuccess;        FileUpload_Config.onFailed = cfg.onFailed || FileUpload_Config.onFailed;        FileUpload_Config.onError = cfg.onError || FileUpload_Config.onError;        if (!document.getElementById('UploadProcess')) {            var bakImg = "";            var proImg = "";            if (FileUpload_Config.ProcessBackgroundImage)                bakImg = "background-image:url(" + FileUpload_Config.ProcessBackgroundImage + ") ;";            if (FileUpload_Config.ProgressImage)                proImg = "background-image:url(" + FileUpload_Config.ProgressImage + ");";            var ProcessPercentTop = FileUpload_Config.ProgressHeight + 1;            var ProcessTextTop = FileUpload_Config.ProgressHeight * -1;            var margin = (FileUpload_Config.ProgressHeight * -1) + " 0 0 " + (FileUpload_Config.ProgressWidth / 2 * -1);            var htmlstr = "<div class=\"wbox_bg\" style=\"display:none;\"></div>"                        + "<div id=\"UploadBox\" class=\"wbox wbox0\">"                        + "<div class=\"wbox_content\">"                        + "<div id=\"UploadBoxContent\" class=\"wbox_c\"></div>"                        + "</div>"                        + "</div>";            $(htmlstr).appendTo($(document.body));            htmlstr = "<div id=\"UploadProcess\" style=\"z-index:" + (FileUpload_Config.ProgressZIndex +100)+ "\">"                        + "<div id=\"ProcessPercent\" style=\"position:relative;top:" + (ProcessPercentTop - 1) + "px;left:0px;width:1px;height:" + FileUpload_Config.ProgressHeight + "px;display:none;" + proImg + "z-index:" + (FileUpload_Config.ProgressZIndex + 102) + "\"></div>"                        + "<div id=\"ProcessBackground\" style=\"position:relative;width:" + FileUpload_Config.ProgressWidth + "px;height:" + FileUpload_Config.ProgressHeight + "px;" + bakImg + "z-index:" + (FileUpload_Config.ProgressZIndex + 101) + "\"></div>"                        + "<div id=\"ProcessText\" style=\"position:relative;top:" + ProcessTextTop + "px;width:" + FileUpload_Config.ProgressWidth + "px;height:" + FileUpload_Config.ProgressHeight + "px;text-align:center;font-family:微软雅黑;line-height:" + FileUpload_Config.ProgressHeight + "px;z-index:" + (FileUpload_Config.ProgressZIndex + 103) + "\">0%</div>"                        + "</div>";            if (!FileUpload_Config.ProcessBackgroundImage || !FileUpload_Config.ProgressImage)                htmlstr = "<div id=\"UploadProcess\" style=\"position:absolute;top:50%;left:50%;margin:" + margin + ";z-index:" + FileUpload_Config.ProgressZIndex + "\">"                        + "<div id=\"ProcessPercent\" style=\"position:relative;top:" + ProcessPercentTop + "px;left:1px;width:1px;height:" + FileUpload_Config.ProgressHeight + "px;background-color:#ea5504;display:none;z-index:" + FileUpload_Config.ProgressZIndex + 2 + "\"></div>"                        + "<div id=\"ProcessBackground\" style=\"position:relative;width:" + FileUpload_Config.ProgressWidth + "px;height:" + FileUpload_Config.ProgressHeight + "px;border:solid 1px #ea5504;z-index:" + FileUpload_Config.ProgressZIndex + 1 + "\"></div>"                        + "<div id=\"ProcessText\" style=\"position:relative;top:" + ProcessTextTop + "px;width:" + FileUpload_Config.ProgressWidth + "px;height:" + FileUpload_Config.ProgressHeight + "px;text-align:center;valign:middle;line-height:" + FileUpload_Config.ProgressHeight + "px;z-index:" + FileUpload_Config.ProgressZIndex + 3 + "\">0%</div>"                        + "</div>";            $(htmlstr).appendTo($('#UploadBoxContent'));            if (!document.getElementById('UploadStatus')) {                var statusStr = "<div id=\"UploadStatus\" style=\"display:none\">0</div>";                $(statusStr).appendTo($(document.body));            }        }    },    UpdateProcess: function (percent) {        if (percent == 100)            percent = 100;        if (document.getElementById("UploadBox").style.display != "block")            wbox("#UploadBox");        if (document.getElementById('ProcessPercent').style.display == "none")            document.getElementById('ProcessPercent').style.display = "block";        document.getElementById('ProcessText').innerHTML = "正在上传 " + percent + "%";        var totalWidth = FileUpload_Config.ProgressWidth;        var currWidth = parseInt(percent / 100 * totalWidth);        document.getElementById('ProcessPercent').style.width = currWidth + "px";    },    UploadFile: function (file) {        if (!file)            file = document.getElementById('FileUpload_InputFile').files[0];        if (FileUpload_Config.ImgCompressionEnable) {            var cvs = document.createElement('canvas');            var img = new Image;            img.src = FileUpload.getObjectURL(file);            img.onload = function () {                var img2 = new Image;                cvs.width = img.naturalWidth;                cvs.height = img.naturalHeight;                var ctx = cvs.getContext('2d');                ctx.drawImage(img, 0, 0, cvs.width, cvs.height);                file = cvs.toDataURL("image/png");            }        }        var arr = file.name.split('.');        if (FileUpload_Config.FileFormat.indexOf(arr[arr.length - 1].toLowerCase()) == -1) {            alert("文件格式不正确");            return;        }        if (file.size > FileUpload_Config.FileMaxSize * 1024 * 1024) {            alert("文件大小不能超过" + FileUpload_Config.FileMaxSize + "M");            return;        }        FileUpload.UpdateProcess(0);        (function (file) {            var xhr = new XMLHttpRequest();            if (xhr.upload) {                // 上传中                xhr.upload.addEventListener("progress", function (e) {                    if ($('#UploadStatus').html() != "1") {                        return;                    }                    FileUpload.ShowProgress(e.loaded, e.total);                }, false);                // 文件上传成功或是失败                xhr.onreadystatechange = function (e) {                    switch (xhr.readyState) {                        case 4:                            if (xhr.status == 200) {                                FileUpload.ClearFile();                                FileUpload_Config.onComplete(xhr.responseText);                                var data = JSON.parse(xhr.responseText);                                $('#UploadStatus').html("0");                                FileUpload.ShowResult(data.result, data);                            } else {                                FileUpload.ClearFile();                                $('#UploadStatus').html("0");                                FileUpload.ShowResult(false, xhr.responseText);                            }                            break;                        case 1:                            FileUpload_Config.onStart();                            break;                        case 0:                            FileUpload_Config.beforeStart();                            break;                        default:                            break;                    }                };                var fd = new FormData();                fd.append(FileUpload_Config.ParamName, file);                for (var p in FileUpload_Config.OtherParams) {                    fd.append(p, FileUpload_Config.OtherParams[p]);                }                // 开始上传                xhr.open("POST", FileUpload_Config.RequestUrl, true);                //xhr.setRequestHeader("Content-Type", "multipart/form-data;");                //xhr.overrideMimeType("application/octet-stream");                //xhr.setRequestHeader("filename", file.name);                xhr.send(fd);                $('#UploadStatus').html("1");                //    xhr.send(file);            }        })(file);    },    UploadFileMultiple: function (files) {        if (!files)            files = document.getElementById('FileUpload_InputFile').files;        for (var i=0;i<files.length;i++) {            var file = files[i];            var arr = file.name.split('.');            if (FileUpload_Config.FileFormat.indexOf(arr[arr.length - 1].toLowerCase()) == -1) {                alert("包含格式不正确的文件");                return;            }            if (file.size > FileUpload_Config.FileMaxSize * 1024 * 1024) {                alert("单个文件大小不能超过" + FileUpload_Config.FileMaxSize + "M");                return;            }        }        FileUpload.UpdateProcess(0);        (function (files) {            var xhr = new XMLHttpRequest();            if (xhr.upload) {                // 上传中                xhr.upload.addEventListener("progress", function (e) {                    if ($('#UploadStatus').html() != "1") {                        return;                    }                    FileUpload.ShowProgress(e.loaded, e.total);                }, false);                // 文件上传成功或是失败                xhr.onreadystatechange = function (e) {                    switch (xhr.readyState) {                        case 4:                            if (xhr.status == 200) {                                FileUpload.ClearFile();                                FileUpload_Config.onComplete(xhr.responseText);                                var data = JSON.parse(xhr.responseText);                                $('#UploadStatus').html("0");                                FileUpload.ShowResult(data.result, data);                            } else {                                FileUpload.ClearFile();                                $('#UploadStatus').html("0");                                FileUpload.ShowResult(false, xhr.responseText);                            }                            break;                        case 1:                            FileUpload_Config.onStart();                            break;                        case 0:                            FileUpload_Config.beforeStart();                            break;                        default:                            break;                    }                };                var fd = new FormData();                for (var j = 0; j < files.length; j++) {                    fd.append(FileUpload_Config.ParamName+j.toString(), files[j]);                }                for (var p in FileUpload_Config.OtherParams) {                    fd.append(p, FileUpload_Config.OtherParams[p]);                }                // 开始上传                xhr.open("POST", FileUpload_Config.RequestUrl, true);                //xhr.setRequestHeader("Content-Type", "multipart/form-data;");                //xhr.overrideMimeType("application/octet-stream");                //xhr.setRequestHeader("filename", file.name);                xhr.send(fd);                $('#UploadStatus').html("1");                //    xhr.send(file);            }        })(files);    },    ShowProgress: function (loaded, total) {        //var eleProgress = _this.find('#' + file.index + 'file .progress');        var percent = (loaded / total * 100).toFixed(2);        FileUpload.UpdateProcess(percent);        //SetProgress(percent);        //drawProcess(parseInt(percent));        // eleProgress.find('.progressbar').css('width',percent);        // if(total-loaded<500000){loaded = total;}//解决四舍五入误差        // eleProgress.parents('li').find('.progressnum').html(formatFileSize(loaded)+'/'+formatFileSize(total));    },    GoUpload: function () {        if (!document.getElementById('UploadStatus')) {            var statusStr = "<div id=\"UploadStatus\" style=\"display:none\">0</div>";            $(statusStr).appendTo($(document.body));        }        if ($('#UploadStatus').html() != "0")            return;        if (!document.getElementById('FileUpload_InputFile'))            $("<div style=\"display:none\"><input id=\"FileUpload_InputFile\" type=\"file\" onchange=\"FileUpload.UploadFile()\"/></div>").appendTo($(document.body));        document.getElementById('FileUpload_InputFile').click();    },    ClearFile: function () {        var obj = document.getElementById('FileUpload_InputFile');        if (obj)            obj.outerHTML = obj.outerHTML;    },    ShowResult: function (res, data) {        boxClose('#UploadBox');        $('#UploadStatus').html("0");        if (res) {            $('#ProcessText').html("上传成功");            FileUpload_Config.onSuccess(data);        }        else {            $('#ProcessText').html("上传失败");            FileUpload_Config.onFailed(data);        }    },    ImageCompression: function (file) {        //var srcJ = new Array();//定义三变量用于装载参数        //var srcI = new Array();        //var srcIName = new Array();//同步装载上传图片的name        //var srcIGif = new Array();        var imgInfoCp = function () {            this.name = "";            this.size = 204800;        };        var getObjectURL = function (file) {            var url = null;            if (window.createObjectURL != undefined) { // basic                url = window.createObjectURL(file);            } else if (window.URL != undefined) { // mozilla(firefox)                url = window.URL.createObjectURL(file);            } else if (window.webkitURL != undefined) { // webkit or chrome                url = window.webkitURL.createObjectURL(file);            }            return url;        };        var minCpmpSize = 153600;//约为150kB,当上传图片size比此小时就不用压缩        //var j = 0;        //var k = j;        var cout = "";        //srcI[j] = getObjectURL(file);        var imgageUrl = getObjectURL(file);        var imageInfoCp = new imgInfoCp();        imageInfoCp.name = file.name;        imageInfoCp.type = file.type;        imageInfoCp.size = file.size;        //图片时fig时使用fileReader 不压缩        if (file.type == 'image/gif') {            var fileRead = new FileReader(file);            fileRead.onload = function (event) {                //srcJ[k] = event.target.result;                imgageUrl = event.target.result;            };            fileRead.readAsDataURL(file);//        }        var img = new image;        img.src = imgageUrl;        //srcIName.push(imageInfoCp);        //var imageUrl;         //imageUrl = srcI[j];        //var srcTemp_j = new Array;        //srcTemp_j[i] = new Image;        //srcTemp_j[i].src = srcI[k + i];        //srcTemp_j[i].onload = function () {        //    var cvs = document.createElement('canvas');        //    var img = new Image; img.src = srcI[k];        //    cvs.width = img.naturalWidth;        //    cvs.height = img.naturalHeight;        //    var ctx = cvs.getContext('2d');        //    ctx.drawImage(img, 0, 0, cvs.width, cvs.height);        //    if (srcIName[k].size > minCpmpSize) {        //        if (srcIName[k].type == 'image/png')        //            srcJ[k] = cvs.toDataURL('image/png', 0.6);        //        else if (srcIName[k].type == 'image/gif');        //        else if (srcIName[k].type == 'image/jpeg') srcJ[k] = cvs.toDataURL('image/jpeg', 0.6);        //        else srcJ[k] = cvs.toDataURL(srcIName[k].type, 0.6);        //    } else {        //        if (srcIName[k].type == 'image/png')        //            srcJ[k] = cvs.toDataURL('image/png', 0.9);        //        else if (srcIName[k].type == 'image/gif');        //        else if (srcIName[k].type == 'image/jpeg') srcJ[k] = cvs.toDataURL('image/jpeg', 0.9);        //        else srcJ[k] = cvs.toDataURL(srcIName[k].type, 0.9);        //    }        //    $.jsonpGet({        //        url: "/BuildingInfo/UploadBuildingBanner",        //        data: { BuildId: bmess.BuildingId, Filename: srcIName[k].name, ImageData: srcJ[k] },        //        async: false,        //        callbackName: "UploadBuildingBanner",        //        fun: function (e) {        //            $("#ImagePath").attr("src", e.data[0].ImagePath);        //            window.localStorage.setItem("ImagePath", e.data[0].ImagePath)        //            console.log(bmess.imagePath);        //        },        //        error: function (data) {        //            $.tipalart({        //                content: data.msg        //            });        //        }        //    });        //}    },    getObjectURL: function (file) {        var url = null;        if (window.createObjectURL != undefined) { // basic            url = window.createObjectURL(file);        } else if (window.URL != undefined) { // mozilla(firefox)            url = window.URL.createObjectURL(file);        } else if (window.webkitURL != undefined) { // webkit or chrome            url = window.webkitURL.createObjectURL(file);        }        return url;    },    UploadFileAsString: function (mothed, url, params) {        var percent=0;        var timer = setInterval(function () {            if (percent >= 99) {                clearInterval(timer);                return;            }            percent++;            FileUpload.UpdateProcess(percent);        }, 1000);        var request = new XMLHttpRequest();        request.onreadystatechange = function () {            switch (request.readyState) {                case 4:                    clearInterval(timer);                    percent = 100;                    FileUpload.UpdateProcess(percent);                    if (request.status == 200) {                        var data = JSON.parse(request.responseText);                        if (data.result)                            FileUpload.ShowResult(true, data.data);                        else                            FileUpload.ShowResult(false, data);                    }                    else                        FileUpload.ShowResult(false, request.responseText);                    break;                default:                    break;            }        };        //url+="?";        //for(var p in params){        //    url+=p+"="+params[p]+"&";        //}        //url=url.substring(0,url.length);        request.open(mothed, url, true);        request.send(JSON.stringify(params));    }};
//css
 .FileUpload_Center {margin: 50px auto;width: 400px;} .FileUpload_loading {width: 397px;height: 49px;background: url(./Image/bak.png) no-repeat;} .FileUpload_loading div {width: 0px;height: 48px;background: url(./Image/pro.png) no-repeat;color: #fff;text-align: center;font-family: Tahoma;font-size: 18px;line-height: 48px;} .FileUpload_message {width: 200px;height: 35px;font-family: Tahoma;font-size: 12px;background-color: #d8e7f0;border: 1px solid #187CBE;display: none;line-height: 35px;text-align: center;margin-bottom: 10px;margin-left: 50px;} .wbox_bg{ display:none; z-index:8888; position:absolute; left:0; right:0; top:0; bottom:0; width:100%; height:100%; background:#000; filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: 0.3; _height:expression(document.documentElement.clientHeight); _width:expression(document.documentElement.clientWidth);} .wbox{ display:none; z-index:9999; position:absolute; left:50%; top:50%; overflow:hidden;}.wbox_content{ float:left; width:100%;}.wbox_c{ padding:8px;}

0 0
原创粉丝点击