临时文件

http://100.64.47.15:8888/fi/sp?qstr=BEF96E059C5717842F0C1B689B927255c3owMDI2MDA


var UPLOAD_FILE_SUCCESS     = "success";//服务器本来有的Files
var UPLOAD_FILE_FAIL        = "fail";//默认值
var UPLOAD_FILE_DEL         = "del";//标记删除的Files
var UPLOAD_FILE_ADD         = "add";//标记新增的Files
var MAX_FILE_NUM            = 9999;//默认最多上传的文件数量
var isUploading    = false;   //是否在上传过程中,若在上传过程中,不让提交(验证框架不通过);可以离开页面
var context = '/rmis';

/**
* 文件上传组件
*
* 文档说明:
* /prod-rmis-dg-dev/comp-rmis-core/doc/架构文档/uploadInfo上传组件说明文档.doc
*
*/
(function($){
/**
* 控件初始化函数
*/
    $.fn.createUploader = function(options){
        var defaults = {
        flash_url : context +  "/rmis/common/upload/js/swfupload.swf",//SWF的flash路径
        upload_url: context + "/rmis/common/upload/commonUpload!ajaxfileupload.action", //上传的文件路径
        fileSuffix: "*.*", //可上传的文件类型,“如*.jpg,*.gif”,用分号隔开
        maxSize : 0, //文件大小限制,单位为KB,0表示大小无限制.有效的单位有B、KB、MB、GB,默认单位是KB
        max:MAX_FILE_NUM, //允许上传的最多文件数量
        min:0,                      //最少上传的文件数量,0代表无限制
        compress : false,          //是否压缩图片,默认不压缩
        compressHeight : 600, //压缩后图片高度(等比压缩后图片高度最大值600),默认600
        compressWidth : 800, //压缩后图片宽度(等比压缩后图片宽度最大值800),默认800
        business_field : "business_field",//business_field 业务模块
        render_text : "添加附件",   //上传按钮的文字
        file_types_description : "All Files",//上传选择文件对话框时文件描述
        file_queue_limit : 0,      //设置文件上传队列中等待文件的最大数量限制。
        is_upload_complete_tips : false,//上传完后是否提示
        upload_complete_tips : "所有文件上传完毕",//上传完后提示内容
        delable : true,           //是否开启删除功能呢
        width : "455px",           //控件的宽度
        //height : "88px",          //控件的高度
        enable:true,               // 是否开启上传功能,以下功能除了回调函数,其他属性在enable设为false仍可用
        show_pic_num : 3,          //控件的图片显示数量
        jsonVal : null,              //初始化的文件信息,后面要添加一个只传ID,然后JSON获取文件内容的方法
        jsonKey : null,              //初始化文件信息,只传文件的FID,优先级比 jsonVal 高
        beforeUploadRende:function(uploadComponent){ // 控件渲染前调用的方法
       
        },
        afterUploadRende:function(uploadComponent){ // 控件渲染后调用的方法
       
        },
        fileUploadProcess:function(uploadComponent, swfObj){ // 文件上传时调用的方法,由swfuploader驱动
       
        },
        fileUploaded:function(uploadComponent, fileObj){ // 文件上传成功后调用的方法
//        alert(eval("("+fileObj+")").fileName);
        },
        beforeRemoveFile:function(uploadComponent, fileObj){ // 删除文件前调用的方法,返回true则删除,否则不删除;如果文件在上传fileObject的state为fail
//        alert(eval("("+fileObj+")").fileName);
//        alert(fileObj);
        return true;
        }
};
        var options = $.extend(defaults, options);
        var $component = this.each(function(){
       
        //初始化数据
        var $initComponent = $(this);
        var $beforeRemoveMethod =  options.beforeRemoveFile;
        if(options.maxSize != 0 && options.maxSize.indexOf("B") == -1){
    options.maxSize = options.maxSize + "KB";
    }
        var $shwoPicNum = options.show_pic_num;
        var $delable    = options.delable;
        var $min        = options.min;
        var $max        = options.max;
        var $firstLi = null;
        var $uploadFileNum = 0;
        var $businessField = options.business_field;
        //提示
//        var $tipsMsg = "";
       
       
        //压缩限制
        var $compress = options.compress;
            var $compressHeight = 800;
            var $compressWidth = 600;
        //=======================================定义内部的方法 START===========================================
            /**
             * 设置提示信息
             */
            setTips = function(){
            var $suffixTips = "";
//            if(options.fileSuffix != "*.*"){
//            $suffixTips = "上传附件类型为" + options.fileSuffix +  ";";
//            }
            var $maxSizeTips = "";
            if(options.maxSize != 0){
            $maxSizeTips = "每个附件不能超过" + options.maxSize +  ";";
            }
            var $maxTips = "";
            if($max != MAX_FILE_NUM){
            $maxTips = "不能上传超过" + $max +  "个附件;";
            }
            var $minTips = "";
            if($min != 0){
            $minTips = "至少上传" + $min +  "个附件;";
            }
            var $tipsMsg = $suffixTips + $minTips + $maxSizeTips + $maxTips;
            if($tipsMsg != ""){
            $("#tips_msg").html("(" + $tipsMsg + ")");
            }
            };
        /**
        * 根据文件类型,判断应该用哪种样式
        * @param {Object} suffix  文件后缀
        */
            fixFileTypeIcon=function(suffix){
            var dotIndex = suffix.lastIndexOf(".");
            if(dotIndex == -1){
            return "others";
            }
            var tmps = suffix.substring(dotIndex + 1, suffix.length).toLowerCase();
            switch(tmps){
            case "doc":
            case "docx":
            case "wps": return "doc";
            case "txt": return "txt";
            case "jpg":
            case "jpeg":
            case "bmp":
            case "gif":
            case "png": return "image";
            default: return "others";
            }
            };
            /**
             * 渲染文件元素(初始化组件以后,才能调用这个函数)
             * @param fileId   文件ID,上传的时候是控件的文件file.id,显示的时候是数据库的FID
             * @param fileName 文件名
             * @param path     文件下载路径,上传的时候这个无用
             * @param suffix   文件后缀,根据文件类型显示不同的缩略图
             */
            $.fn.showGeverFile = function(options){
            var defaults = {
            id : "id",
            fileId : "fileId",
            fileName : "fileName",
            createTime : "null",
            state : UPLOAD_FILE_ADD,
            path : "path",
            suffix:".doc",
            onServer:false,
            swfUpload: null,
            before : false,  //是否渲染到指定元素的前面
            after_btn  : false,  //渲染到向前按钮的后部,否则渲染到向后按钮的前部
            beforeRemoveMethod : $beforeRemoveMethod
           
            };
            var options = $.extend(defaults, options);
            return this.each(function(){
            //初始化fileObj
            var fileObj    = new Object(); 
                fileObj.fid    = options.fileId; 
                fileObj.path   = options.path; 
                fileObj.fileName   = options.fileName;
                fileObj.suffix = options.suffix;
                fileObj.state  = options.state;
                fileObj.createTime  = options.createTime;
                //初始化JQuery变量
            var $thisDiv = $(this);
           
            var $coverLi = $("<li/>").addClass("slideshowItem").css("margin", "0px 1px;").attr("id", "upload_file_table_" + options.id);
            if(!options.onServer){
            $coverLi.attr("name", "uploading_li");//标示文件为正在上传,服务器没有文件记录
            }
            var $coverTable = $("<table/>").addClass("loading_table");
            var $iconTr = $("<tr/>");
            var $iconTd = $("<td/>").addClass("loading_icon_td");
            var $imgDiv = $("<div/>").addClass("loading_img_div");
            var $delA = $("<a/>").attr("href", "#").addClass("loding_close");
            var $image = $("<img/>").attr("src", options.path);
            var $imageAndADiv = $("<div/>").css("height", "60px");
            var title = options.fileName;
            if(options.createTime != null){
            title +=  "(上传时间 : " + options.createTime + ")";
            }
            var $titleCoverDiv = $("<div/>").addClass("loading_title_cover").attr("title", title);
            var $titleDiv = $("<div/>").addClass("loading_title");
            if(options.fileName.length > 18 ){
            $titleDiv.html(options.fileName.substring(0, 15) + "...");
        }else{
        $titleDiv.html(options.fileName);
        }
            var $downLoadattr = $("<a/>").attr("href", "#");//下载链接
            //进度条
            var $progressTr = $("<tr/>");
            var $progressTd = $("<td/>");
            var $progressCoverDiv = $("<div/>").addClass("loading_bg_box");
            var $progressDiv = $("<div/>").addClass("loading_bg").attr("id", "upload_progress_" + options.id)
            .css("background", "url(" + context +  "/rmis/common/upload/images/loading_bg.png" + ") repeat-x")
            .css("width", "0%");
           
            //进度条
            $progressDiv.appendTo($progressCoverDiv);
            $progressCoverDiv.appendTo($progressTd);
            $progressTd.appendTo($progressTr);
            //删除、图标、标题
            $delA.appendTo($imageAndADiv);
            $image.appendTo($imageAndADiv);
            $imageAndADiv.appendTo($imgDiv);
            $titleDiv.appendTo($titleCoverDiv);
            $titleCoverDiv.appendTo($imgDiv);
            $imgDiv.appendTo($iconTd);
            $iconTd.appendTo($iconTr);
            // 默认隐藏
            $titleCoverDiv.hide();
            //整合
            $iconTr.appendTo($coverTable);
            $progressTr.appendTo($coverTable);
            $coverTable.appendTo($coverLi);
           
            //控制显示的图标
            switch(fixFileTypeIcon(options.suffix)){
            case "image":
            if(options.onServer){//服务器有,则显示图片
            var folder = "/" + options.path.substring(0, options.path.lastIndexOf('/') + 1);
            var fileName = options.path.substring(options.path.lastIndexOf('/') + 1, options.path.length);
            //判断图片是否存在,为了兼容旧照片,旧照片没有缩略图
            $image.attr("src", context + folder + "thumbs_" +  fileName);
            $image.load(function(){})
            .error(function() {
            if($image.attr("src") == (context + folder + "thumbs_" +  fileName)){
            $image.attr("src", context + folder +  fileName).css("width", "90px").css("height", "60px");
            }else{
            return;
            }
                            }) ;
            }else{//正在上传图片,服务器没有图片的
            $image.attr("src", context +  "/rmis/common/upload/images/ico_wj.png").css("width", "90px").css("height", "60px");
            }
            break;
            default:
            $image.attr("src", context +  "/rmis/common/upload/images/ico_wj.png").css("width", "90px").css("height", "60px");
            };
            // 控制显示和隐藏标题和删除按钮,不可以上传的时候,
            $coverTable.mouseover(function(){
            $titleCoverDiv.show();
            if($delable){
            $delA.css("background", "url(" + context +  "/rmis/common/upload/images/ico_close2.png" + ") no-repeat");
                }
            });
            $coverTable.mouseout(function(){
            $titleCoverDiv.hide();
            if($delable){
            $delA.css("background", "");
                }
            });
            //添加下载链接,隐藏进度条,增加hidden 的input框
            if(options.onServer){
            if(fixFileTypeIcon(options.suffix) == "image"){// 预览图片
            $downLoadattr.attr("href", "#").bind("click", function(){
            FormSubmit.winOpen(context + "/rmis/common/upload/showPic.jsp?currentAttachPath=" + context + "/" + options.path ,748,560,'selectIcon');
            });
            }else{//下载文件
            $downLoadattr.attr("href", context + "/rmis/common/upload/downloadfile.jsp?filepath=" + options.path + "&filename=" + encodeURI(encodeURI(options.fileName)));
            }
            //图片和按钮渲染
            $image.appendTo($downLoadattr);
                $downLoadattr.appendTo($imageAndADiv);
                $progressCoverDiv.hide();
            //添加input 元素 用于上传到业务表
            var json = $.toJSON(fileObj);
            var $valInput = $("<input/>").attr("name", "commonFilesVals").attr("id", "upload_file_fid_" + options.fileId).attr("type", "hidden").val(json);
            var $stateInput = $("<input/>").attr("name", "commonFilesState").attr("id", "upload_file_state_" + options.fileId).attr("type", "hidden").val(fileObj.state);
            $valInput.appendTo($initComponent);
            $stateInput.appendTo($initComponent);
            }else{//上面已经渲染了
            //$image.appendTo($imageAndADiv);
            };
            var delReturnJson = $.toJSON(fileObj);
            //绑定点击删除动作
            $delA.bind("click", function(){
            var isDel = true;
            // 删除文件前调用的方法 
            if (typeof options.beforeRemoveMethod == 'function') { // 确保类型为函数类型
            if(options.onServer){
            var returnfileObj = $.evalJSON($("#upload_file_fid_" + options.fileId).val());
            var json = $.toJSON(returnfileObj);
            isDel = options.beforeRemoveMethod($initComponent, json); // 执行回调函数
            }else{ //上传过程取消上传,Json不传
            isDel = options.beforeRemoveMethod($initComponent, delReturnJson); // 执行回调函数
            }
           
            };
            //根据当前文件的state执行删除操作
            if(isDel){
            var $stateDom = $("#upload_file_state_" + options.fileId);
            switch($stateDom.val()){
            case UPLOAD_FILE_ADD :
            //本次会话新增的Files,删除则不需要上传到业务里面,hidden的input都删除
            /*$.getJSON(context + "/rmis/common/upload/commonUpload!ajaxDel.action?fid=" + options.fileId, function(json){
                        if(json.success){
                        $stateDom.remove();
                    $("#upload_file_fid_" + options.fileId).remove();
                    $coverLi.remove();
                    //删除的时候,显示指定数量的图片
                    $("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
                    getAllAttachNum();
                        }else{
                        alert("删除失败");
                        }
                        });*/
            //更新 2014-5-4 删除文件由 Timer 执行
            $stateDom.remove();
                $("#upload_file_fid_" + options.fileId).remove();
                $coverLi.remove();
                //删除的时候,显示指定数量的图片
                $("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
                getAllAttachNum();
            break;
            case UPLOAD_FILE_SUCCESS : //本来有的Files,已经跟业务有关系的,删除需要标记为删除。修改对应fileObj的state,更新hidden的input的value
            $stateDom.val(UPLOAD_FILE_DEL);
            var fileObj = $.evalJSON($("#upload_file_fid_" + options.fileId).val());
            fileObj.state = UPLOAD_FILE_DEL;
            var json = $.toJSON(fileObj);
            $("#upload_file_fid_" + options.fileId).val(json);
            $coverLi.remove();
            //删除的时候,显示指定数量的图片
            $("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
            getAllAttachNum();
            break;
            default://上传过程中取消
            $coverLi.remove();
            //删除的时候,显示指定数量的图片
                $("#uploading_process_" + options.id).remove();
            $("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
            getAllAttachNum();
            }
            if(!options.onServer && options.swfUpload != null){//不在服务器(正在上传)则取消上传
            options.swfUpload.cancelUpload(options.id, false);
            };
            }
            });
           
            //渲染
            if(options.before){
            $thisDiv.before($coverLi);
            }else if(options.after_btn){
            $("#prev_btn").after($coverLi);
            }else{
            $("#next_btn").before($coverLi);
            }
            //添加的时候,隐藏多余图片
            $("#thumbs li.slideshowItem:gt(" + ($shwoPicNum - 1) +")").hide();
            getAllAttachNum();
            });
            };
           
            /**
             * 根据fid的值从服务器获取信息,初始化插件
             */
            $.fn.initGeverFile = function(fid){
            return this.each(function(){
            if(fid != null){
            var fids = fid.split(",");
            var dataStr = "";
                $.each(fids, function(k, value){
                dataStr += "&fid="+ value;
                });
                $.getJSON(context + "/rmis/common/upload/commonUpload!viewInfos.action?" + dataStr, function(json){
                if(json.success){
                init(json.entity);
                }
                });
            }
            });
            };
           
            /**
             * 根据businessKey 和businessField 的值从服务器获取信息,初始化插件
             */
            $.fn.initGeverFileByBusinessKey = function(businessKey, businessField){
            return this.each(function(){
            if(businessKey != null){
            var businessKeys = businessKey.split(",");
            var dataStr = "";
                $.each(businessKeys, function(k, value){
                dataStr += "&businessKey="+ value;
                });
                dataStr += "&businessField="+ businessField;
                $.getJSON(context + "/rmis/common/upload/commonUpload!ajaxInfoByBusinessKey.action?" + dataStr, function(json){
                if(json.success){
                init(json.entity);
                }
                });
            }
            });
            };
           
           
            /**
             * 根据jsonVal的值初始化插件,要求JSON格式
             */
            $.fn.initGeverFileByVal = function(jsonVal){
            return this.each(function(){
            init(eval('(' + jsonVal + ')'));
            });
            };
            /**
             * 设置上传的最小文件数量
             */
            $.fn.setMin = function(min){
            return this.each(function(){
            if(parseInt(min) >= 0){
            $min = min;
            $("#validateUploadLimitTips").remove();
            validateUploadLimitTips();
            setTips();
            }
            });
            };
            /**
             * 设置最大压缩高度和宽度
             */
            $.fn.setCompress = function(height, width, isCompress){
            return this.each(function(){
                     $compress = true;
                     if("undefined" != typeof isCompress){
                    $compress = isCompress;
                     }
                     if(height <= 600){
                     $compressHeight = height;
                     }
                     if(width <= 800){
                     $compressWidth = width;
                     }
            });
            };
            /**
             * 设置上传的最大文件数量
             */
            $.fn.setMax = function(max){
            return this.each(function(){
            if(parseInt(max) >= 0){
            if(parseInt(max) == 0){
            $max = MAX_FILE_NUM;
            }else{
            $max = max;
            }
            $("#validateUploadLimitTips").remove();
            validateUploadLimitTips();
            $swfUpload.setFileUploadLimit(max);
            setTips();
            }
            });
            };
            /**
             * 根据jsonVal的值,初始化插件
             * jsonVal 格式 value:[{fid:'',path:'',fileName:'',suffix:'',state:''},{fid:'',path:'',fileName:'',suffix:'',state:''}]
             */
            init = function(jsonVal){
            $.each(jsonVal, function(k, value){
    var key = "onServer_file_" + k;
    $initComponent.showGeverFile({
    id       : key,//无ID
    fileId   : value.fid,
    fileName : value.fileName,
    state    : UPLOAD_FILE_SUCCESS, //服务器的文件 State 初始化为 UPLOAD_FILE_SUCCESS
    suffix   : "." + value.suffix,
    path     : value.path,
    createTime : value.createTime,
    onServer : true,
    swfUpload: null //初始化的时候不需要用到控件
    });
    });
            };
            /**
             * 此事件在selectFile或者selectFiles调用后,文件选择对话框显示之前触发。只能同时存在一个文件对话框。
             * 获取当前第一个元素
             */
            fileDialogStart = function(){
            $firstLi = $("#thumbs li.slideshowItem:first");
            }
            /**
        * 添加要上传的的附件
        * 当文件选择对话框关闭消失时,如果选择的文件成功加入上传队列,那么针对每个成功加入的文件都会触发一次该事件
        *
        */
            fileQueued = function(file){
            //若不存在第一张图片,则上传文件的时候放在next按钮的前面
            if(typeof($firstLi.html()) == "undefined" || $firstLi.html() == null){
            $firstLi = $("#next_btn");
            }
            $firstLi.showGeverFile({
            id       : file.id,
            state    : UPLOAD_FILE_FAIL,
            fileName : file.name,
            suffix   : file.type,
            //before   : true,
            swfUpload: $swfUpload
            });
            //增加验证框架,不让提交
            var $validateUploadingInput = $("<input/>").attr("id", "uploading_process_" + file.id).attr("type", "hidden")
            .attr("validateType", "CustomMethod")
            .attr("regexp", "validateUploadingFile()")
            .val("notVal");
        var validateMsg = "文件【" + file.name + "】正在上传,若要提交,请取消该文件上传;";
        $validateUploadingInput.attr("msg", validateMsg);
        $validateUploadingInput.appendTo($("#validate_input_content"));
        $uploadFileNum++;
        //压缩参数
        $swfUpload.addFileParam(file.id, "compress", $compress);
        $swfUpload.addFileParam(file.id, "compressHeight", $compressHeight);
        $swfUpload.addFileParam(file.id, "compressWidth", $compressWidth);
            };
            /**
             * 当选择文件对话框关闭,并且所有选择文件已经处理完成(加入上传队列成功或者失败)时,此事件被触发
             * selectedNum   选择的文件数目
             * queuedNum     选择的文件中成功加入队列的文件数目
             */
            fileDialogComplete=function(selectedNum, queuedNum){
            var cancelUpload = false;
            if(!options.enable){
            cancelUpload = true;
                alert("不允许上传文件");
                }else if(queuedNum != 0){//选择了文件之后
                //判断是否到达文件上传限制
                var validateMsg = "";
            var successLen = 0;
                $.each($("input[name='commonFilesState']"), function(){
                switch($(this).val()){
                case UPLOAD_FILE_SUCCESS:
                case UPLOAD_FILE_ADD:
                successLen++;
                break;
                default:
               
                }
                });
                if(parseInt(successLen) > parseInt($max)){
                validateMsg += "最多上传" + $max + "个附件。";
                cancelUpload = true;
                alert(validateMsg);
                }
                }
           
            if(cancelUpload){
            //取消上传
            for(i = 0; i<queuedNum; i++){
                $swfUpload.cancelUpload();
                }
            //删除增加的文件(不符合上传验证)
            $.each($("li[name='uploading_li']"), function(){
            var validateId = $(this).attr("id").replace("upload_file_table_", "uploading_process_");
            $("#" + validateId).remove();
            $(this).remove();
            });
            //删除的时候,显示指定数量的图片
$("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
            }else{
            // 开始上传
                $swfUpload.startUpload();
            }
            };
            /**
             * 判断是否在上传过程中,用于验证,上传中则返回false
             */
            validateUploadingFile = function(){
            return !isUploading;
            };
           
            /**
             * 上传过程
             */
            uploadProgress = function(file, bytesLoaded, bytesTotal){
            var percent = Math.ceil((bytesLoaded / (1.05*bytesTotal)) * 100);
            $("#upload_progress_" + file.id).css("width", percent + "%");
            // 文件上传时调用的方法,由swfuploader驱动
            if (typeof options.fileUploadProcess == 'function') {
            options.fileUploadProcess($initComponent, $swfUpload); // 执行回调函数
            };
            isUploading = true;
            };
            /**
             * 完成上传后的动作,无论成功与否,选择多个文件的时候按顺序上传
             * 服务器处理完毕
             */
            uploadComplete=function(file){
            $swfUpload.startUpload();
            isUploading = false;
            //上传成功,不再验证是否有文件在上传
            $("#uploading_process_" + file.id).remove();
            $uploadFileNum--;
            //alert($("input[name='commonFilesState'][value='" + UPLOAD_FILE_FAIL + "']").length);
            if($uploadFileNum == 0 && options.is_upload_complete_tips){
            alert(options.upload_complete_tips);
            }
            };
            /**
             * 上传成功,服务器未处理
             */
            uploadSuccess = function(file, data){
            try{
            var dataObj=eval("("+data+")");//转为JSON
            if(dataObj.success){//重新渲染,删除元素
            //封装数据
            var fileObj    = new Object(); 
            fileObj.fid    = dataObj.entity.fid; 
            fileObj.path   = dataObj.entity.path; 
            fileObj.fileName   = dataObj.entity.fileName;
            fileObj.suffix = dataObj.entity.suffix;
            fileObj.state  = UPLOAD_FILE_ADD;
            fileObj.createTime = dataObj.entity.createTime; 
            var $iconDiv = $("#upload_file_table_" + file.id);
            //重新渲染
            $iconDiv.showGeverFile({
            id       : file.id,
            fileId   : dataObj.entity.fid,
            fileName : dataObj.entity.fileName,
            state    : UPLOAD_FILE_ADD,
            suffix   : "." + dataObj.entity.suffix,
            path     : dataObj.entity.path,
            createTime : fileObj.createTime,
            onServer : true,
            before   : true,
            swfUpload: $swfUpload
            });
            //删除旧元素
            $iconDiv.remove();
            $("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
            var json = $.toJSON(fileObj); 
            // 文件上传后调用的方法
            if (typeof options.fileUploaded == 'function') {
            options.fileUploaded($initComponent, json);
            };
            }else{
            $("#upload_file_table_" + file.id).remove();
            $("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
            alert(dataObj.msg);
            }
            }catch (ex) {
            $("#upload_file_table_" + file.id).remove();
            $("#thumbs li.slideshowItem:lt(" + ($shwoPicNum ) +")").show();
            alert("服务器保存附件出错");
            }
            };
            /**
             * 上传数量限制,跟业务相关,文件数量在范围之内则返回true,否则false
             * addNum 新增的数量
             */
            validateUploadLimit = function(addNum){
            var successLen = addNum;
            $.each($("input[name='commonFilesState']"), function(){
            switch($(this).val()){
            case UPLOAD_FILE_SUCCESS:
            case UPLOAD_FILE_ADD:
            successLen++;
            break;
            default:
           
            }
            });
            if(parseInt(successLen) >= parseInt($min) && parseInt(successLen) <= parseInt($max)){
            return true;
            }else{
            return false;
            }
            }
            /**
             * 上传数量限制,提示信息
             */
            validateUploadLimitTips = function(){
            var $validateInput = $("<input/>").attr("id", "validateUploadLimitTips").attr("type", "hidden").attr("validateType", "CustomMethod").attr("regexp", "validateUploadLimit(0)").val("notVal");
        var validateMsg = "";
        if($min != 0){
        validateMsg += "至少上传" + $min + "个附件。";
        }
        if($max != MAX_FILE_NUM){
        validateMsg += "最多上传" + $max + "个附件。";
        }
        $validateInput.attr("msg", validateMsg);
        $validateInput.appendTo($("#validate_input_content"));
            }
            /**
             * 添加文件到队列出错
             */
            fileQueueError = function(file, errorCode, message) {
            switch (errorCode) {
            case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
            alert("所选择的文件【" + file.name + "】超过文件大小限制,每个文件不超过" + options.maxSize);
            break;
            case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
            alert("所选择的文件【" + file.name + "】是空文件,请重新选择其他文件");
            break;
            case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
            alert("所选择的文件【" + file.name + "】的文件类型不符合要求,只允许上传的文件后缀名为:" + options.fileSuffix);
            break;
            case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
            alert("所选择的文件超过文件数量限制,文件数量不超过" + $max + "个");
            break;
            default:
            break;
            }
            }
            /**
             * 绑定前后移动的事件
             */
            movePic = function(){
    if($("#thumbs li.slideshowItem").length>$shwoPicNum){//大于指定个数,才移动
    if (this.id == 'play_prev') {
    var $last = $("#thumbs li.slideshowItem:last");
    $("#prev_btn").after($last);
    }else{
    var $first = $("#thumbs li.slideshowItem:first");
    $("#next_btn").before($first);
    }
    $("#thumbs li.slideshowItem").show();
    $("#thumbs li.slideshowItem:gt(" + ($shwoPicNum - 1) +")").hide();
    }
    };
            /**
             * 获取文件数量
             */
            getAllAttachNum = function(){
            var allAttachNum = 0;
            $.each($("input[name='commonFilesState']"), function(){
            switch($(this).val()){
            case UPLOAD_FILE_SUCCESS:
            case UPLOAD_FILE_ADD:
            allAttachNum++;
            break;
            default:
           
            }
            });
            $("#upload_attach_num").html("&nbsp;&nbsp;已上传附件数量:" + allAttachNum);
            };
           
            //=======================================定义内部的方法 END===========================================
           
           
            // 渲染前方法 , 引用回调函数
        if (typeof options.beforeUploadRende == 'function') { // 确保类型为函数类型
        options.beforeUploadRende($initComponent); // 执行回调函数
        };
        //========================================================
       
       
        var $coverTable = $("<table/>").attr("border", "0").attr("cellpadding", "0").attr("cellspacing", "0").css("width", "100%");
        var $tr_1 = $("<tr/>");
        var $btnSpan = $("<span/>").attr("id", "attach_file_btn");
        var $td_1_1 = $("<td/>").css("text-align", "center").css("width", "140px");
        var $tipSpan = $("<span/>").attr("id", "tips_msg");
        var $validateDiv = $("<div/>").attr("id", "validate_input_content").css("display", "none");
        //var $td_1_2 = $("<td/>").css("height", "100%").css("width", "1px").css("background", "#afd0f1 repeat-y ");
        var $td_1_2 = $("<td/>");
        var $td_1_3 = $("<td/>").attr("colspan", "3");
        var $div_1_3_1 = $("<div/>").css("height", "100%").css("width", options.width).css("border", "0px");
       
        $btnSpan.appendTo($td_1_1);
        $("<br/>").appendTo($td_1_1);
        $tipSpan.appendTo($td_1_1);
        $validateDiv.appendTo($td_1_2);
        $td_1_1.appendTo($tr_1);
        $td_1_2.appendTo($tr_1);
        $tr_1.appendTo($coverTable);
        $div_1_3_1.appendTo($td_1_3);
        $td_1_3.appendTo($tr_1);
       
        //外围框架的渲染,例如左右滑动按钮,控件大小控制
        var $contentDiv = $("<div/>").attr("id", "thumbs").css("width", options.width).css("height", "80px");
        var $ul = $("<ul/>");
        var $prevBtn = $("<li/>").attr("id", "prev_btn").addClass("first").addClass("btnPrev");
        var $nextBtn = $("<li/>").attr("id", "next_btn").addClass("last").addClass("btnNext").css("float", "right");
        var $prevImg = $("<img/>").attr("id", "play_prev").attr("src", context +  "/rmis/common/upload/images/left.png");
        var $nextImg = $("<img/>").attr("id", "play_next").attr("src", context +  "/rmis/common/upload/images/right.png");
        $prevImg.appendTo($prevBtn);
        $nextImg.appendTo($nextBtn);
        $prevBtn.appendTo($ul);
        $nextBtn.appendTo($ul);
        $ul.appendTo($contentDiv);
        $contentDiv.appendTo($div_1_3_1);
        //显示附件数量
        var $fileNumDiv = $("<div/>").attr("id", "upload_attach_num").css("margin-left", "24px").css("text-align", "left").css("width", options.width).css("height", "12px");
        $fileNumDiv.appendTo($div_1_3_1);
        //业务模块
        $div_1_3_1.append($("<input/>").attr("type", "hidden").attr("name", "business_field").val($businessField));
        $prevImg.bind('click', movePic);
        $nextImg.bind('click', movePic);
       
       
        $coverTable.appendTo($initComponent);
       
       
       
        //=====================================================================
        //设置提示信息
        setTips();
        //执行初始化方法,jsonKey或者jsonVal
            if(options.jsonKey != null){
            var dataStr = "";
            var dataJson = eval('(' + options.jsonKey + ')');
        $.each(dataJson, function(k, value){
        dataStr += value.fid + ",";
        });
        $initComponent.initGeverFile(dataStr);
        }else if(options.jsonVal != null){
        init(eval('(' + options.jsonVal + ')'));//根据jsonVal初始化插件
        }
            $initComponent.setCompress(options.compressHeight, options.compressWidth, options.compress);
        /**
        * 初始化swf插件
        */
            if(options.enable){
            $swfUpload=new SWFUpload({
            flash_url : options.flash_url,
            upload_url: options.upload_url,
            file_types: options.fileSuffix,
            file_size_limit : options.maxSize,
            file_upload_limit: $max,
            post_params : {
            "compress"       : $compress,         
            "compressHeight" : $compressHeight,
            "compressWidth"  : $compressWidth
            },
            file_types_description : options.file_types_description,
            file_queue_limit : options.file_queue_limit,
           
            custom_settings : {
            progressTarget : "fsUploadProgress",
            cancelButtonId : "btnCancel"
            },
            debug: false,
           
            // Button settings
            button_placeholder_id: "attach_file_btn", //"spanButtonPlaceHolder",
            button_image_url: context +  "/rmis/common/upload/images/button2.png",
            button_width: "108",
            button_height: "22",
            button_text:  "<a href='#'  class='theUploadFont'>" + options.render_text + "</a>",//options.render_text, //<a href="#" class="button_img_3">上传文件</a>
            button_text_style: ".theUploadFont { display: block;color: #000000;text-align: center;}",
           
           
            file_dialog_start_handler : fileDialogStart, //此事件在selectFile或者selectFiles调用后,文件选择对话框显示之前触发。只能同时存在一个文件对话框。
            file_queued_handler : fileQueued,  //选择文件后触发
            file_dialog_complete_handler : fileDialogComplete, //当选择文件对话框关闭,并且所有选择文件已经处理完成(加入上传队列成功或者失败)时,此事件被触发
            upload_complete_handler : uploadComplete,//上传结束(无论成功与否)
            upload_success_handler : uploadSuccess,//上传成功
            file_queue_error_handler : fileQueueError,
            upload_progress_handler : uploadProgress
            });
            }
        //结合验证框架,控制文件上传限制
            validateUploadLimitTips();
//            $initComponent.clearGarbage();//绑定自动清除垃圾文件动作
           
   
        });
        // 渲染后方法 , 引用回调函数
        if (typeof options.afterUploadRende == 'function') { // 确保类型为函数类型
        options.afterUploadRende($component); // 执行回调函数
        };
        return $component;
    };
})(jQuery);



/**
* 获取图片引用,预览图片时,子窗口引用
*/
getAttach = function(){
var attach = [];
jQuery.each(jQuery("input[name='commonFilesVals']"), function(){
var json = eval("(" + jQuery(this).val() + ")");
switch(json.state){
case UPLOAD_FILE_SUCCESS:
case UPLOAD_FILE_ADD:
if(fixFileTypeIcon(json.suffix) == "image"){
attach.push(context + "/" + json.path);//统计图片数量
}
break;
default:
}
});
return attach;
};

/**
* 根据businessKey 和businessField 的值从服务器获取信息,打开图片浏览
*
* 提供给不需要初始化组件的页面
*/
showPicByBusinessKey = function(businessKey, businessField){
if(businessKey != null){
var businessKeys = businessKey.split(",");
var dataStr = "";
jQuery.each(businessKeys, function(k, value){
dataStr += "&businessKey="+ value;
});
dataStr += "&businessField="+ businessField;
FormSubmit.winOpen(context + "/rmis/common/upload/commonUpload!getPicByBusinessKey.action?" + dataStr ,748,560,'selectIcon');
}
};







猜你喜欢

转载自ffffohno.iteye.com/blog/2296299