SWF upload 方法重写

var swfu;
var fileUploadObject = {
    paramesObject: {
        url: "", //action地址
        sessionId: "", //sessionid,用于防止在firefox中flash文件上传时session丢失
        fileSizeLimit: "20", //最大可上传的文件大小 单位MB
        fileTypes: "*.avi;*.pdf;*.rar;*.zip;*.jpg;*.gif;*.doc;*.docx;*.xls;*.xlsx;*.html;*.txt;*.ppt;*.pptx;*.tif", //可上传的文件类型
        path: "/", //引用的文件跟flash上传控件的相对路径 uploadjs/.....
        isAutoUpload: false, //是否启用自动上传,即选择文件后自动上传
        fileQueueLimit: "0", //0表示不限制选中文件个数,其他表示一次只能上传几个文件
        isShowDelBtn: true,//是否显示删除按钮
        post_params: {}, //跟文件一起传送的参数   post的参数信息,格式:{"aaa":"aaa0","bbb":"bbb0"}


        // Button settings
        button_image_name: "uploadbg.jpg",//必填 图片高度应该是button高度的三倍,有三种不同样式
        button_placeholder_id: "spanButtonPlaceholder",//必填
        button_width: 82,//必填
        button_height: 29,//必填
        button_text: '<span class="button">添加文件</span>',//必填
        button_text_style: '.button {color:#ffffff;background: #0874B2;text-align: center;}',//必填
        button_text_top_padding: 6,//必填
        button_text_left_padding: 3//必填
    },


    _files: new Array(),
    //添加文件  最终返回的文件名
    _addFiles: function (result, flashFileId) {
        var isExist = false;
        for (var i = 0; i < fileUploadObject._files.length; i++) {
            if (fileUploadObject._files[i].fileName == result.fileName) {
                isExist = true;
                break;
            }
        }
        if (isExist == false) {
            result.flashFileId = flashFileId;
            fileUploadObject._files.push(result);
        }
        return isExist;
    },
    _delFiles: function (flashFileId) {
        for (var i = 0; i < fileUploadObject._files.length; i++) {
            if (fileUploadObject._files[i].flashFileId == flashFileId) {
                fileUploadObject._files.splice(i, 1);
                break;
            }
        }
    },




    init: function (paramesObject) {
        this.paramesObject = paramesObject;
        this.paramesObject.scuessCount = 0; //当前已经成功的有多少个
        this.paramesObject.cancelCount = 0; //当前正在上传的有多少个
        this.paramesObject.failCount = 0; //当前上传失败的有多少个
        var url = paramesObject.url.indexOf(".aspx") == -1 ? paramesObject.url + ";jsessionid=" + paramesObject.sessionId : paramesObject.url;
        //传递其他参数
        paramesObject.post_params.fileTypes = paramesObject.fileTypes;
        paramesObject.post_params.fileSizeLimit = paramesObject.fileSizeLimit;
        swfu = new SWFUpload({
            // Backend Settings
            upload_url: url,
            post_params: paramesObject.post_params,//post参数
            // File Upload Settings
            file_size_limit: paramesObject.fileSizeLimit + " MB",
            file_types: paramesObject.fileTypes, //"*.rar;*.zip;*.jpg;*.gif;*.doc;*.docx;*.xls;*.xlsx;*.html;*.txt",
            file_types_description: "All Files",
            file_upload_limit: "0",    // Zero means unlimited
            file_queue_limit: paramesObject.fileQueueLimit,
            file_queue_error_handler: fileUploadObject.fileQueueError,
            file_dialog_complete_handler: fileUploadObject.fileDialogComplete,
            upload_progress_handler: fileUploadObject.uploadProgress,
            upload_error_handler: fileUploadObject.uploadError,
            upload_success_handler: fileUploadObject.uploadSuccess,
            upload_complete_handler: fileUploadObject.uploadComplete,
            file_queued_handler: fileUploadObject.filequeued,


            // Button settings
            button_image_url: paramesObject.path + "uploadjs/" + paramesObject.button_image_name,
            button_placeholder_id: paramesObject.button_placeholder_id,
            button_width: paramesObject.button_width,
            button_height: paramesObject.button_height,
            button_text: paramesObject.button_text,
            button_text_style: paramesObject.button_text_style,
            button_text_top_padding: paramesObject.button_text_top_padding,
            button_text_left_padding: paramesObject.button_text_left_padding,


            // Flash Settings
            flash_url: paramesObject.path + "uploadjs/swfupload.swf", // Relative to this file


            custom_settings: {
                upload_target: "divFileProgressContainer"
            },


            // Debug Settings
            debug: false
        });       


        //载入文件进度窗口
        fileUploadObject.initFileIntoWindow();
    },


    //文件选择时错误
    fileQueueError: function (file, errorCode, message) {
        try {
            var errorName = "";
            if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
                errorName = "只能上传" + fileUploadObject.paramesObject.fileQueueLimit + "个文件,请重新选择!";
                alert(errorName);
                return;
            }


            switch (errorCode) {
                case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
                    errorName = "文件大小为0!";
                    break;
                case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                    errorName = "文件大小不能超过" + fileUploadObject.paramesObject.fileSizeLimit + "MB,请重新上传!";
                    break;
                case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
                    errorName = "文件格式错误,请重新上传";
                    break;
                default:
                    errorName = message;
                    break;
            }
            fileUploadObject.addFileInfoWindow(file, true, errorName);
        } catch (ex) {
            swfu.debug(ex);
        }
    },


    //文件加入队列后
    filequeued: function (file) {


        //文件个数有限制的情况
        if (parseInt(fileUploadObject.paramesObject.fileQueueLimit) != 0) {
            fileUploadObject.paramesObject.scuessCount = 0; //当前已经成功的有多少个
            fileUploadObject.paramesObject.cancelCount = 0; //当前正在上传的有多少个
            $("div[id^='controll']").each(function () {
                if ($(this).find("a").hasClass("delA") || $(this).html() == "") {
                    fileUploadObject.paramesObject.scuessCount++;
                }
                else if ($(this).find("a").hasClass("cancelA")) {
                    fileUploadObject.paramesObject.cancelCount++;
                }
            })
        }


        if (fileUploadObject.paramesObject.scuessCount + fileUploadObject.paramesObject.cancelCount >= parseInt(fileUploadObject.paramesObject.fileQueueLimit) && parseInt(fileUploadObject.paramesObject.fileQueueLimit) != 0) {
            swfu.cancelUpload(file.id, true);
            fileUploadObject.paramesObject.failCount++; //由于文件上传总数超过限制导致取消上传的文件数
        } else {
            fileUploadObject.addFileInfoWindow(file, false, "");
        }
    },


    //启动上传
    startUpload: function () {
        if (swfu.getStats().files_queued > 0) {
            swfu.startUpload();
        }
    },


    //选择完文件后的事件
    fileDialogComplete: function (numFilesSelected, numFilesQueued) {
        if (fileUploadObject.paramesObject.failCount > 0) {
            alert("只能上传" + fileUploadObject.paramesObject.fileQueueLimit + "个文件");
            fileUploadObject.paramesObject.failCount = 0;
        }
        try {
       
            if (swfu.getStats().files_queued > 0) {
                //启用自动上传
           
                if (fileUploadObject.paramesObject.isAutoUpload == true) {
                    swfu.startUpload();
                }
            }
        } catch (ex) {
            swfu.debug(ex);
        }
    },


    //上传进度
    uploadProgress: function (file, bytesLoaded, bytesTotal) {
        try {
            var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
            $("#progress" + file.id).css("width", percent / 100 * 200).html(percent + "%");
            $("#loadData" + file.id).html((bytesLoaded / 1024 / 1024).toFixed(2) + "MB");
            $("#totalData" + file.id).html((bytesTotal / 1024 / 1024).toFixed(2) + "MB");
            if (percent == 100) {
                $("#status_" + file.id).html("文件加载完成,准备上传......");
            }
        } catch (ex) {


            swfu.debug(ex);
        }
    },


    //取消上传
    cancelFun: function (FileID) {
        swfu.cancelUpload(FileID, true);
        fileUploadObject.resetProWinPosition(FileID);
    },


    //清除文件
    clearFun: function (FileID) {
        fileUploadObject.resetProWinPosition(FileID);
    },


    //保存成功后
    uploadSuccess: function (file, serverData) {
        var result = eval("(" + serverData + ")");
        if ($("#numSpanBtn").hasClass("beforeStart")) {
            $("#numSpanBtn").removeClass("beforeStart").text("0").css("color", "green");
        }
        
        var hasMsg=true;
        if(result.msg==undefined||result.msg==""||result.msg==null){
        hasMsg=false;
      }
        
        switch (result.resultCode) {
            case "0000":
                file.name = result.fileName;
                if (fileUploadObject._addFiles(result, file.id) == false) {
                if (hasMsg == false) {
                        $("#status_" + file.id).html("上传成功!");
                    } else {
                        $("#status_" + file.id).html(result.msg);
                    }
                    $("#div_" + file.id).addClass("success");
                    if (fileUploadObject.paramesObject.isShowDelBtn) {
                        $("#controll" + file.id).html("<a href=\"javascript:void(0);\" class=\"delA\" οnclick=\"fileUploadObject.delFun(\'" + file.name + "','" + file.id + "\')\">删除</a>");
                    }
                    else {
                        $("#controll" + file.id).html("");
                    }
                } else {
                $("#status_" + file.id).html("<font color=red>该附件已经存在!</font>");
                }
                $("#numSpanBtn").text(fileUploadObject._files.length);
                break;
            case "0001":
            if(hasMsg==false){
            $("#status_" + file.id).html("<font color=red>该附件已经存在!</font>");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                break;
            case "0002":
            if(hasMsg==false){
            $("#status_" + file.id).html("<font color=red>上传失败!</font>");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                
                break;
            case "0003":
            if(hasMsg==false){
            $("#status_" + file.id).html("<font color=red>上传格式不正确!</font>");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                
                break;
            case "0004":
            if(hasMsg==false){
            $("#status_" + file.id).html("<font color=red>您未登录,请重新登录!</font>");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                
                break;
            case "0005":
            if(hasMsg==false){
            $("#status_" + file.id).html("<font color=red>缺少文件格式限制!</font>");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                
                break;
            case "0006":
            if(hasMsg==false){
            $("#status_" + file.id).html("<font color=red>缺少文件限制大小参数!</font>");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                
                break;
            case "0007":
            if(hasMsg==false){
            $("#status_" + file.id).html("<font color=red>文件过大,请重新上传!</font>");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                
                break;
            default:
            if(hasMsg==false){
                $("#status_" + file.id).html("其他错误");
          }else{
          $("#status_" + file.id).html("<font color=red>"+result.msg+"</font>");
          }
                
                break;
        }
        if (result.resultCode != "0000") {
            $("$controll" + file.id).html("<a href=\"javascript:void(0);\" οnclick=\"fileUploadObject.clearFun(\'" + file.id + "\')\">清除</a>");
        }
        fileUploadObject.afterUploadSuccess(result, file);
    },


    //单个文件上传成功以后执行的接口
    //result为后端返回的json字符串
    afterUploadSuccess: function (resultJsonObj, file) {


    },


    //删除文件后要顺便删除文件名
    delFun: function (fileName, iIndex) {
        fileUploadObject._delFiles(iIndex);
        fileUploadObject.resetProWinPosition(iIndex);
    },




    //文件完成上传 ,在uploadsuccess之后
    uploadComplete: function (file) {
        try {
            /*  I want the next upload to continue automatically so I'll call startUpload here */
            if (swfu.getStats().files_queued > 0) {
                swfu.startUpload();
            }
            else {
                //所有文件上传完成之后执行的事件
                fileUploadObject.uploadAllComplete(fileUploadObject._files);
            }
        } catch (ex) {
            swfu.debug(ex);
        }
    },


    //fileNames文件名称
    uploadAllComplete: function (fileNamesArray) {
        //向外界抛出的一个接口,可随意制定文件全部上传完成后执行的事件
    },
    uploadError: function (file, errorCode, message) {
        fileUploadObject.paramesObject.errorCode = errorCode;
        var progress;
        try {
            switch (errorCode) {
                case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                    try {
                        $("#status_" + file.id).html("文件已取消!");
                    }
                    catch (ex1) {
                        swfu.debug(ex1);
                    }
                    break;
                case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                        try {
                            $("#status_" + file.id).html("文件停止上传!");
                        }
                        catch (ex2) {
                            swfu.debug(ex2);
                        }
                case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
                    $("#status_" + file.id).html("该文件被限制上传!");
                    break;
                case -230:
                    $("#status_" + file.id).html("上传路径错误,请重新选择上传目录!");
                    break;
                default:
                    $("#status_" + file.id).html(message);
                    break;
            }
        } catch (ex3) {
            swfu.debug(ex3);
        }
    },
    //初始化上传文件的浮空窗口
    initFileIntoWindow: function () {
        if ($("#fileNum").length == 0) {
            var uploadContentContent = '<div id="fileNum" style="width: 50px; height: 50px; background-color: #babbbf;position: fixed;_position:absolute;">';
            uploadContentContent += '<span id="numSpanBtn" style="width: 100%; height: 100%; display:block;text-align: center; line-height:50px;font-size: 35px; color: red;cursor: pointer;">0</span>';
            uploadContentContent += '</div>';
            if($("body").find(".dialogWindow").hasClass("dialogWindow")){
            $(".dialogWindow").append(uploadContentContent);


            }else{
            $("body").append(uploadContentContent);


            }
            rePosition();
            $(window).bind("resize.uploadFile", function () {
                rePosition();
            });


            $("#numSpanBtn").click(function () {
                if ($(".fileUploadItem").length > 0) {
                    if ($(".fileUploadItem").eq(0).is(":visible")) {
                        fileUploadObject._hiddenFileWindow();
                    } else {
                        fileUploadObject._showFileWindow();
                    }
                }
            });


            function rePosition() {
                var left = $(window).width() - $("#fileNum").width() - 20;
                var top = $(window).height() - $("#fileNum").height() - 20;
                $("#fileNum").css({ "left": left + "px", "top": top + "px" });
            }
            //ie6
            if (!-[1, ] && !window.XMLHttpRequest) {
                $(window).bind("scroll", function () {
                    var left = $(window).width() - $("#fileNum").width() - 20 + $(document).scrollLeft();
                    var top = $(window).height() - $("#fileNum").height() - 20 + $(document).scrollTop();
                    $("#fileNum").css({ "left": left + "px", "top": top + "px" });
                });
            }


        }
    },
    //显示文件上传进度列表
    _showFileWindow: function () {
        $(".fileUploadItem").each(function (i) {
            var left = "-250px";
            var top = (i + 1) * -82 + "px";
            var width = "300px";
            var height = "80px";
            $(this).animate({ "left": left, "top": top, "opacity": 1, "width": width, "height": height }, 300 + i * 80);
        })
    },
    //隐藏文件上传进度列表
    _hiddenFileWindow: function () {
        $(".fileUploadItem").each(function (i) {
            $(this).animate({ "left": "50px", "top": "0px", "opacity": 0, "width": "0px", "height": "0px" }, 150 + i * 80);
        })
    },
    //加入文件进度
    addFileInfoWindow: function (file, isError, errorMsg) {
        if ($("#div_" + file.id).length > 0) return;


        var left = "-250";
        var top = ($(".fileUploadItem").length + 1) * -82;


        var fileUploadItem = ' <div class="fileUploadItem" id="div_' + file.id + '" style=" position: absolute; width: 300px; height: 80px; left: ' + left + 'px; top: ' + top + 'px; background-color: #babbbf; overflow: hidden; font-size: 12px; line-height:normal;" data-left=" ' + left + '" data-top="' + top + '">';
        fileUploadItem += '       <div class="fileItem" style="margin: 5px;color: #0874B2; text-align:left;">';
        fileUploadItem += '                 <div class="rightShow" style="width:100%; float:left;">';
        fileUploadItem += '                     <div class="rightTop" style="height: 20px; width: 100%; line-height:20px; overflow:hidden;">';
        fileUploadItem += '                         <div id="name' + file.id + '" style="height: 100%; float: left; width:200px; overflow:hidden;">' + file.name + '</div>';
        if (isError == true) {
            fileUploadItem += '                         <div class="controller" style=" height:100%; float:right;" id="controll' + file.id + '"><a href="javascript:void(0);" οnclick="fileUploadObject.clearFun(\'' + file.id + '\')">清除</a></div>';
        }
        else {
            fileUploadItem += '                         <div class="controller" style="height: 100%; float: right;" id="controll' + file.id + '"><a href="javascript:void(0);" class="cancelA" οnclick="fileUploadObject.cancelFun(\'' + file.id + '\')">取消</a></div>';
        }
        fileUploadItem += '                     </div>';
        fileUploadItem += '                     <div class="rightBottom" style="height: 20px; line-height: 20px; width: 100%; margin-top: 5px;">';
        fileUploadItem += '                         <div style="float: left; background-color: #73C7F0; width: 200px; height: 15px; margin-top: 2px;">';
        fileUploadItem += '                             <div id="progress' + file.id + '" style="float: left; height: 15px; line-height: 15px; text-align: center; color: #ffffff; background-color: #0874B2; width: 0px;"></div>';
        fileUploadItem += '                         </div>';
        fileUploadItem += '                         <div class="progressNum" style="float: right;"><span id="loadData' + file.id + '">0MB</span>/<span id="totalData' + file.id + '">0MB</span></div>';
        fileUploadItem += '                     </div>';
        if (isError != true) {
            fileUploadItem += '                     <div id="status_' + file.id + '">正在等待上传.........</div>';
        } else {
            fileUploadItem += '                     <div id="status_' + file.id + '" style="color:red;">' + errorMsg + '</div>';
        }
        fileUploadItem += '                     <div style="clear: both;"></div>';
        fileUploadItem += '                 </div>';
        fileUploadItem += '                <div style="clear: both;"></div>';
        fileUploadItem += '            </div>';
        fileUploadItem += '        </div>';


        $("#fileNum").append(fileUploadItem);


        if ($(".fileUploadItem").length > 0) {
            if ($(".fileUploadItem").eq(0).is(":hidden")) {
                $("#div_" + file.id).css({ "left": "50px", "top": "0px", "opacity": 0, "width": "0px", "height": "0px" });
            }
        }


        //如果还没有选择文件
        if (!$("#numSpanBtn").hasClass("beforeStart")) {
            $("#numSpanBtn").text($(".fileUploadItem").length - $(".success", "#fileNum").length).css("color", "red").addClass("beforeStart");
        } else {
            $("#numSpanBtn").text($(".fileUploadItem").length - $(".success", "#fileNum").length);
        }
    },
    //重置进度条窗体位置 参数为要删除的文件id号
    resetProWinPosition: function (id) {
        $("#div_" + id).nextAll().each(function (i) {
            var top = parseInt($(this).css("top"), 10) + 82;
            $(this).animate({ "top": top + "px" }, 200 + i * 50);
        });


        //最终删除
        var isSuccess = $("#div_" + id).hasClass("success");
        $("#div_" + id).remove();


        if ($("#numSpanBtn").hasClass("beforeStart")) {
            if ($(".fileUploadItem").length - $(".success", "#fileNum").length == 0 && $(".success", "#fileNum").length != 0) {
                $("#numSpanBtn").text(fileUploadObject._files.length).css("color", "green");
                $("#numSpanBtn").removeClass("beforeStart");
            } else {
                $("#numSpanBtn").text($(".fileUploadItem").length - $(".success", "#fileNum").length);
            }
        } else {
            if (isSuccess) {
                $("#numSpanBtn").text(fileUploadObject._files.length);
                if (fileUploadObject._files.length == 0) {
                    $("#numSpanBtn").css("color", "red");
                }
            }
        }


    },
    //清空文件窗口
    clearFileWindow: function () {
        $(".fileUploadItem").each(function () {
            var id = $(this).attr("id").replace("div_", "");
            swfu.cancelUpload(id, true);
            $(this).remove();
        });
        $("#numSpanBtn").text("0").css("color", "red").addClass("beforeStart");
        fileUploadObject._files.length = 0;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值