Uploadifive 使用教程【結合七牛】


Uploadify是一個基於JQuery的多文件上傳JS組件,高度定制,兩個版本可供選擇。flash版本在最新的Safari等不再支持flash的瀏覽器或者一些手機瀏覽器中就無法正常的加載使用,因此推薦使用html5版本!

優點:

  • 支持多文件上傳
  • 支持進度條顯示
  • 支持拖拽上傳
  • 支持文件格式檢查及大小限制
  • 支持在文件上傳的各個生命周期對文件進行處理

Uploadify兩個版本一個為flash版(免費),一個為HTML5版(收費$5.00 USD,還有一個用戶商業用途的就比較貴了)

基本使用:

環境要求: jQuery1.4或以上的版本;一個能解析php、asp.net等類似的服務器端腳本語言的服務器運行環境。

  1. 下載uploadifive壓縮文件解壓至你的項目目錄
  2. 引入相關js、css文件:
    • <link rel="stylesheet" type="text/css" href="uploadifive.css">
    • <script src="/jquery.js" type="text/javascript"></script>
    • <script src="jquery.uploadifive.js" type="text/javascript"></script>
  3. 頁面中添加type="file"的一個input,並且指定id
    <input id="file_upload" type="file" name="file_upload" />
  4. 初始化uploadfive,綁定到id為file_upload的input上
$(function() {
    $('#file_upload').uploadifive({
		//處理文件上傳的服務器端腳本,可根據自己的項目環境修改
        'uploadScript' : 'uploadifive.php'
        // Put your options here
    });
});

Options選項參數

對常用參數進行解釋

  • auto:是否自動觸發上傳 ,如果選擇false需要手動觸發通過調用:
    $('#file_upload').uploadifive('upload')
  • buttonText:指定上傳按鈕文字
  • checkScript:指定檢查文件名是否重復的服務器端腳本
  • dnd:是否允許拖動上傳,如果為false則禁用拖動上傳
  • fileObjName:服務器端獲取的文件對象的名稱,如php的 $_FILES['fileObjName']
  • fileSizeLimit:限制上傳文件的大小【單位KB,MB,GB】
  • fileType:上傳文件類型:如圖片 image/*,如果指定了類型限制,點擊上傳彈出的資源選擇器中,非限定的文件類型將無法不選擇
  • formData:額外提交的表單數據可以在這個參數下指定{'someKey' : 'someValue'}
  • height|width:上傳按鈕的寬度與高度只能通過這兩個屬性進行修改
  • multi:是否多文件上傳[true|false]

Events回調方法

  • onAddQueueItem:當文件添加至上傳隊列中時觸發此回調方法
$(function() {
    $('#file_upload').uploadifive({
        'uploadScript'   : '/uploadifive.php',
        'onAddQueueItem' : function(file) {
            alert('The file ' + file.name + ' was added to the queue!');
        }
    });
});
  • onCancle:當點擊取消上傳,從上傳隊列中移除文件對象時觸發
$(function() {
    $('#file_upload').uploadifive({
        'uploadScript' : '/uploadifive.php',
        'onCancel'     : function() {
            alert('The file ' + file.name + ' was cancelled!');
        }
    });
});
  • onUpload:當調用upload方法手動觸發上傳是觸發一次
  • onUploadFile:在每個文件准備開始上傳時觸發一次【這個回調方法存在一個bug,見下文】
$(function() {
    $('#file_upload').uploadifive({
        'uploadScript' : '/uploadifive.php'
        'onUploadFile' : function(file) {
            alert('The file ' + file.name + ' is being uploaded.');
        }
    });
});
  • onProgress:文件上傳過程中不斷的觸發,因此你可以在此回調方法中定制你的上傳進度等信息
$(function() {
    $('#file_upload').uploadifive({
        'uploadScript' : '/uploadifive.php'
        'onProgress'   : function(file, e) {
            if (e.lengthComputable) {
                var percent = Math.round((e.loaded / e.total) * 100);
            }
            file.queueItem.find('.fileinfo').html(' - ' + percent + '%');
            file.queueItem.find('.progress-bar').css('width', percent + '%');
        }
    });
});
  • onUploadComplete:文件上傳完成時觸發
    回調參數 file:上傳完的文件對象;data:服務器端(uplodify.php)返回的信息
$(function() {
    $('#file_upload').uploadifive({
        'uploadScript'     : '/uploadifive.php'
        'onUploadComplete' : function(file, data) {
            alert('The file ' + file.name + ' uploaded successfully.');
        }
    });
});
  • onFallback:初始化時檢查瀏覽器是否支持HTML5
  • onError:在文件添加到上傳隊列或者在上傳的過程中發生錯誤的回調函數
    errorType類型見官網文檔

Methods直接調用的方法

  • debug:比較有用的debug方法,可以在控制台打印出上傳的相關信息
<a href="javascript:$('#file_upload').uploadifive('debug')">Debug</a>

與七牛結合直接上傳文件到七牛雲存儲

注:上傳到七牛需要對幾個參數進行修改

  1. 七牛可以接受的fileObjName的名稱是file
  2. 表單數據中必須包含上傳token[token有服務器端返回]
  3. 表單數據中指定上傳的key,作為七牛空間中存儲的文件名
  4. uploadScript指定為:http://up.qiniu.com/

以上2,3兩項數據的傳遞需要修改formData選項,如果是單個文件上傳,這樣是沒有問題的,如果是多文件上傳的情況,第一個文件正常上傳成功,當上傳第二個時,up.qiniu.com就會返回一個錯誤狀態碼614,即文件已存在。

最初是想在onAddQueueItem回調函數中修改formData中token和key的值,但是並沒有得到想要的結果。查看請求到七牛的header中的表單信息的key值是一樣的,所以,在文件加入隊列中時進行修改表單formData只能觸發一次,從源碼中可以看到確實如此。

繼續查看文檔找到onUploadFile是在每個文件上傳前觸發,於是修改代碼,調試發現此回調函數並沒有被觸發,查看源碼毫無此回調函數調用的蹤跡,於是加入如下代碼到jquery.uploadfive.js的$data.uploadFile 的函數里的填充form表單數據之前379行,如下所示:

// Create a new FormData object
var formData = new FormData();
// Add the form data
formData.append(settings.fileObjName, file);
//trigger onUploadFile fucntion 看這里看這里看這里!!!
if (typeof settings.onUploadFile === 'function') {
    settings.onUploadFile.call($this, file);
}
// Add the rest of the formData
for (i in settings.formData) {
  formData.append(i, settings.formData[i]);
}

至此,多文件上傳七牛與uploadfive的結合完成!


參考文檔:uploadify官網文檔html5版本


免責聲明!

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



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