jquery uploadify文件上傳插件用法精析


jquery uploadify文件上傳插件用法精析

CreationTime--2018年8月2日11點12分

Author:Marydon

一、參數說明

1.參數設置

$("#file_upload").uploadify({
    height        : 30,//高度
    swf           : '/uploadify/uploadify.swf',//指定swf文件
    uploader      : '/uploadify/uploadify.do',//后台處理的url
    width         : 120,//寬度
    buttonText: '上傳圖片', //按鈕顯示的文字
    fileTypeExts:  '*.*',//上傳文件的類型,多個類型使用;分割'*.gif; *.jpg; *.png',默認值為:'*.*'
    fileTypeDesc: 'Image Files',//這個屬性值必須設置fileTypeExts屬性后才有效,用來設置選擇文件對話框中的提示文本,默認值為:All Files
    formData: {'someKey':'someValue','someOtherKey':1},//發送給后台的其他參數通過formData指定
    queueID: 'fileQueue',//可以為DOM元素的id,設置隊列樣式, 默認值為false,隊列id動態生成,不帶#
    auto: true,//選擇文件后自動上傳,默認值為:true
    multi: true,//設置為true將允許多文件上傳,默認值為:true
    buttonClass:'xttblog',//上傳按鈕的樣式
    buttonImage:'',//按鈕的圖片路徑
    buttonCursor:'hand',//鼠標指針懸停在按鈕上的樣子,默認值為:hand
    checkExisting:'/uploadify/check-exists.do',//文件的路徑,檢查目標文件夾中是否已上載的文件的名稱.如果文件名不存在,該腳本將返回1,如果文件名存在或0,默認值為false
    debug:true,//打開swfupload調試模式,默認值為:false
    fileObjName:'Filedata',//后台可以通過這個名字獲取到文件對象,默認值為:Filedata
    fileSizeLimit:'',//允許文件上傳的最大大小.這個值可以是數字或字符串.如果它是一個字符串,它接受一個單位(B,KB,MB,GB),默認單位為KB。值設置為0,表示要上傳的文件大小無限制(單文件大小)
    itemTemplate:'',//選擇不同的HTML模板,添加上傳文件到上傳隊列。主要有4種模板:instanceID(uploadify實例id)、fileID(文件id)、fileName(文件名字)、fileSize(文件大小).例如:${fileName},默認值為:false
    method:'POST',//POST或GET,默認值為post
    overrideEvents:['onUploadProgress'],//重寫事件,onUploadProgress進度條不更新,jsonArray,默認值為:空數組[]
    preventCaching:true,//是否緩存,默認值為:true不緩存
    progressData:'percentage',//進度條percentage百分百、speed上傳速度更新,默認值為:percentage
    queueSizeLimit:999,//隊列大小,超過將觸發onselecterror事件,和uploadLimit類似,默認值為:999
    removeCompleted:true,//上傳完成后是否刪除上傳隊列,默認值為:true
    removeTimeout:3,//上傳完成后,延遲3秒刪除隊列,默認值為:3秒
    requeueErrors:true,//如果為true上傳失敗后將繼續嘗試再次上傳,默認值為:fasle
    successTimeout:30,//文件上傳成功后服務端應返回成功標志,此項設置返回結果的超時時間,默認值為:30秒
    uploadLimit:999,//最大上傳文件數量,如果達到或超出此限制將會觸發onUploadError事件,默認值為:999
});

2.事件設置

$("#file_upload").uploadify({
    onCancel : function(file) {
        //移除文件時觸發
    },
    onClearQueue:function(queueItemCount){
        //當調用函數cancel方法且queueItemCount>1時才觸發,queueItemCount參數為被取消上傳的文件數量
    },
    onDestroy:function(queueItemCount){
        //當destory方法被調用時觸發
    },
    onDialogClose:function(queueData){
        //當文件瀏覽框關閉時觸發,如果將此事件被重寫,則當向隊列添加文件上傳出錯時不會彈出錯誤消息提示
        //queueData對象包含如下屬性:
        //filesSelected 文件選擇對話框中共選擇了多少個文件
        //filesQueued 已經向隊列中添加了多少個文件
        //filesReplaced 已經向隊列中替換了多少個文件
        //filesCancelled 取消了多少個文件
        //filesErrored 出錯了多少個文件
    },
    onDialogOpen:function(){
        //當文件選擇對話框彈出時立即出發,但可能在文件選擇對話框被關閉之前並不能全部執行
    },
    onDisable:function(){
        //當disable方法禁用Uploadify上傳按鈕時被調用時觸發
    },
    onEnable:function(){
        //當disable方法啟用Uploadify上傳按鈕時被調用時觸發
    },
    onFallback:function(){
        //當Uploadify初始化過程中檢測到當前瀏覽器不支持flash時觸發
        alert("當前瀏覽器未安裝或未啟用flash插件,無法進行文件上傳!");
    },
    onInit:function(){//首次初始化Uploadify結束時觸發
    },
    onQueueComplete:function(queueData){
        //文件上傳隊列處理完畢后觸發,queueData對象包含如下屬性:
        //uploadsSuccessful上傳成功的文件數量
        //uploadsErrored上傳失敗的文件數量
    },
    onSelect:function(file){//選擇文件后向隊列中添加每個上傳任務時都會觸發
    },
    onSelectError:function(file, errorCode, errorMsg){
        //選擇文件后向隊列中添加每個上傳任務時如果失敗都會觸發
        //file文件對象
        //errorCode錯誤代碼如下:
        //QUEUE_LIMIT_EXCEEDED任務數量超出隊列限制;
        //FILE_EXCEEDS_SIZE_LIMIT文件大小超出限制;
        //ZERO_BYTE_FILE文件大小為0
        //INVALID_FILETYPE文件類型不符合要求
        //errorMsg錯誤提示,可通過'this.queueData.errorMsg'定制
    },
    onSWFReady:function(){//Flash文件載入成功后觸發
    },
    onUploadComplete:function(file){//每個文件上傳完畢后無論成功與否都會觸發
    },
    onUploadError:function(file, errorCode, errorMsg, errorString){
        //文件上傳出錯時觸發,參數由服務端程序返回
    },
    onUploadProgress:function(file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal){
        //處理上傳隊列的過程中會多次觸發此事件,每當任務狀態有更新時都會觸發
        //file文件對象
        //bytesUploaded已上傳的字節數
        //bytesTotal文件總字節數
        //totalBytesUploaded當前任務隊列中全部文件已上傳的總字節數
        //totalBytesTotal當前任務隊列中全部文件的總字節數
    },
    onUploadStart:function(file){//當文件即將開始上傳時立即觸發
    },
    onUploadSuccess:function(file, data, response){
        //當文件上傳成功時觸發
        //file文件對象
        //data服務端輸出返回的信息,數據格式必須是字符串,否則接收不到
        //response有輸出時為true,如果無響應為false,如果返回的是false,當超過successTimeout設置的時間后假定為true
    }
});

3.方法調用

cancel(fileID, suppressEvent)
用途:

  取消隊列中的任務,不管此任務是否已經開始上傳

參數說明:
  fileID要取消的文件ID,如果為空則取消隊列中第一個任務,如果為'*'則取消所有任務
  suppressEvent是否阻止觸發onUploadCancel事件,當清空隊列時非常實用

示例:

$('#file_upload').uploadify('cancel');// 取消第一個
$('#file_upload').uploadify('cancel','*');// 清空隊列

destroy()
用途:

  銷毀Uploadify實例並將文件上傳按鈕恢復到原始狀態

示例:

$('#file_upload').uploadify('destroy');// 銷毀Uploadify實例

disable(setDisabled)
用途:

  禁用或啟用文件瀏覽按鈕

參數說明:
  setDisabled – 設置為true表示禁用,false為啟用

示例:

$('#file_upload').uploadify('disable',true);// 禁用按鈕

settings(name, value, resetObjects)
用途:

  獲取或設置Uploadify實例參數

參數說明:
  name – 屬性名稱,如果只提供屬性名稱則表示獲取其值
  value – 屬性值
  resetObjects – 設置為true時,更新postData對象將清空現有的值。否則,新的值將被添加到其末尾

示例:

$('#file_upload').uploadify('settings','buttonText','BROWSE');// 將按鈕參數的值改為BROWSE
$('#file_upload').uploadify('settings','buttonText'));// 獲取到按鈕參數的值 

stop()
用途:

  停止當前正在上傳的任務

示例:

$('#file_upload').uploadify('stop');//停止上傳

upload(fileID)
用途:

  立即上傳指定的文件,如果fileID為’*'表示上傳所有文件,要指定上傳多個文件,則將每個文件的fileID作為一個參數

示例:

$('#file_upload').uploadify('upload','*');// 開始上傳所有文件

二、調用

  第一步:頁面隨意設置一個id="file_upload"的html元素

<!-- 文件上傳 -->
<div id="file_upload"></div>

  說明:指定一個dom元素的id,該dom元素在uploadify初始化后會被Flash按鈕代替,這個dom元素相當於一個占位符。

  第二步:頁面加載完畢后,綁定並設置參數

// 頁面加載完畢后,才能獲取到file_upload這個dom對象
$(function(){
    $('#file_upload').uploadify({
        // 參數配置
    });
}); 

  加載成功,頁面元素展示

三、數據交互

1.前台如何傳參?

  方法一:get傳參

  方式一(正確方式):通過onUploadStart實現(推薦使用)

$('#file_upload').uploadify({
    'method', 'get',
    'buttonText' : '添加文件',
    'fileTypeExts' : '*.gif; *.jpg; *.png;*.pdf;*.zip;',// 文件類型限制
    'fileTypeDesc' : '請選擇gif jpg png pdf zip類型的文件',// 文件類型描述
    'swf' : baseUrl + '/uploadify/flash/uploadify.swf',// flash插件
    'uploader' : baseUrl + '/uploadFile.do',// 上傳的文件請求處理
    'onDialogClose' : function(queueData) {// 選擇文件窗口關閉時,觸發
         
    },
    'onUploadStart' : function(file){// 文件上傳前,觸發
        // 請求參數:上傳每個文件的同時提交到服務器的額外數據,中文需要編碼
        $('#file_upload').uploadify("settings","formData",{
            'param1' : encodeURI('測試文件上傳傳參'),
            'param2' : $('#aa').val()// 動態參數
        });
    },
    'onUploadSuccess' : function(file, data, response) {// 上傳成功
        window.open(baseUrl + '/fileList.jsp');
    },
    'onUploadError' : function(file, errorCode, errorMsg, errorString) {// 上傳失敗
         
    },
    'onFallback' : function(){// 文件上傳按鈕加載失敗
        alert("當前瀏覽器未安裝或未啟用flash插件,無法進行文件上傳!");
    }
});

  方式二(錯誤實現方式):直接聲明

  直接聲明 'formData' : {'param1': encodeURI('測試文件上傳傳參')},這種方式后台接收不到傳遞的參數。

  方法二:post傳參

  方式一:通過onUploadStart實現(推薦使用)

$('#file_upload').uploadify({
    'method', 'post',// 默認值為post,可以不聲明
    'buttonText' : '添加文件',
    'fileTypeExts' : '*.gif; *.jpg; *.png;*.pdf;*.zip;',// 文件類型限制
    'fileTypeDesc' : '請選擇gif jpg png pdf zip類型的文件',// 文件類型描述
    'swf' : baseUrl + '/uploadify/flash/uploadify.swf',// flash插件
    'uploader' : baseUrl + '/uploadFile.do',// 上傳的文件請求處理
    'onDialogClose' : function(queueData) {// 選擇文件窗口關閉時,觸發
        
    },
    'onUploadStart' : function(file){// 文件上傳前,觸發
        // 請求參數:上傳每個文件的同時提交到服務器的額外數據,中文需要編碼
        $('#file_upload').uploadify("settings","formData",{
            'param1' : encodeURI('測試文件上傳傳參'),
            'param2' : $('#aa').val()// 動態參數
        });
    },
    'onUploadSuccess' : function(file, data, response) {// 上傳成功
        window.open(baseUrl + '/fileList.jsp');
    },
    'onUploadError' : function(file, errorCode, errorMsg, errorString) {// 上傳失敗
        
    },
    'onFallback' : function(){// 文件上傳按鈕加載失敗
        alert("當前瀏覽器未安裝或未啟用flash插件,無法進行文件上傳!");
    }
});

  方式二: 直接聲明

  'formData' : {'param1': encodeURI('測試文件上傳傳參')},

2.后台如何接收到參數?

  方式一對應的接收參數的方法為:

// 通過指定onUploadStart()獲取參數
String param1 = request.getParameter("param1");
// 解碼
param1 = URLDecoder.decode(param1, "utf-8");

  方式二對應的接收參數方法為: 

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
    // 通過設置formData獲取參數
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletContext servletContext = this.getServletConfig().getServletContext();
    File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
    factory.setRepository(repository);
    ServletFileUpload upload = new ServletFileUpload(factory);
    try {
        List<FileItem> items = upload.parseRequest(req);
        // 7.對所有請求信息進行判斷
        Iterator<FileItem> iter = items.iterator();
        while (iter.hasNext()) {
            FileItem item = iter.next();
            // form表單格式
            if (item.isFormField()) {
                String paramName = item.getFieldName();
                if ("param1".equals(paramName)) {
                    String paramValue = item.getString();
                    // 解碼
                    paramValue = URLDecoder.decode(paramValue, "utf-8");
                    System.out.println("參數名:" + paramName + "=" + paramValue);
                }
            } else {
                // 文件格式處理 TODO
            }
        }
 
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3.小結:

  推薦使用第一種方式進行傳參;

  不管是get傳參還是post傳參,參數值為中文時,都需要先進行編碼,否則后台接收到的數據亂碼(比如:使用encodeURI());

  不管在初始化的時候,定義的uploadify對象,定義的是post還是get,最終是以post方式進行提交的。

四、如何設置手動上傳?

  第一步:設置參數

  'auto' : false,

  第二步:頁面設置按鈕

<div id="ctrlUpload">
    <a href="javascript:;" onclick="$('#file_upload').uploadify('upload', '*');" class="Button" 
        onmouseover="javascript:this.className='ButtonOver'" onmouseout="javascript:this.className='Button'">
                上傳所有
    </a>    
    <a href="javascript:;" onclick="$('#file_upload').uploadify('cancel', '*');$('#ctrlUpload').hide();" class="Button"
        onmouseover="javascript:this.className='ButtonOver'" onmouseout="javascript:this.className='Button'">
                取消上傳
    </a>	
</div>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM