option
- option( key ) ⇒ *
- option( key, val ) ⇒ self
獲取或者設定Uploader配置項。
Web Uploader內部類的詳細說明,以下提及的功能類,都可以在WebUploader
這個變數中訪問到。
As you know, Web Uploader的每個檔案都是用過AMD規範中的define
組織起來的, 每個Module都會有個module id. 預設module id為該檔案的路徑,而此路徑將會轉化成名字空間存放在WebUploader中。如:
base
:WebUploader.Basefile
: WebUploader.Filelib/dnd
: WebUploader.Lib.Dndruntime/html5/dnd
: WebUploader.Runtime.Html5.Dnd以下文件中對類的使用可能省略掉了WebUploader
字首。
上傳入口類。
var uploader = WebUploader.Uploader({ swf: 'path_of_swf/Uploader.swf', // 開起分片上傳。 chunked: true });
dnd
{Selector} [可選] [預設值:undefined]指定Drag And Drop拖拽的容器,如果不指定,則不啟動。disableGlobalDnd
{Selector} [可選] [預設值:false]是否禁掉整個頁面的拖拽功能,如果不禁用,圖片拖進來的時候會預設被瀏覽器開啟。paste
{Selector} [可選] [預設值:undefined]指定監聽paste事件的容器,如果不指定,不啟用此功能。此功能為通過貼上來新增截圖的圖片。建議設定為document.body
.pick
{Selector, Object} [可選] [預設值:undefined]指定選擇檔案的按鈕容器,不指定則不建立按鈕。
id
{Seletor|dom} 指定選擇檔案的按鈕容器,不指定則不建立按鈕。注意 這裡雖然寫的是 id, 但是不是隻支援 id, 還支援 class, 或者 dom 節點。label
{String} 請採用 innerHTML
代替innerHTML
{String} 指定按鈕文字。不指定時優先從指定的容器中看是否自帶文字。multiple
{Boolean} 是否開起同時選擇多個檔案能力。accept
{Arroy} [可選] [預設值:null]指定接受哪些型別的檔案。 由於目前還有ext轉mimeType表,所以這裡需要分開指定。
title
{String} 文字描述extensions
{String} 允許的檔案字尾,不帶點,多個用逗號分割。mimeTypes
{String} 多個用逗號分割。如:
{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }
thumb
{Object} [可選]
配置生成縮圖的選項。
預設為:
{ width: 110, height: 110, // 圖片質量,只有type為`image/jpeg`的時候才有效。 quality: 70, // 是否允許放大,如果想要生成小圖的時候不失真,此選項應該設定為false. allowMagnify: true, // 是否允許裁剪。 crop: true, // 為空的話則保留原有圖片格式。 // 否則強制轉換成指定的型別。 type: 'image/jpeg' }
compress
{Object} [可選]
配置壓縮的圖片的選項。如果此選項為false
, 則圖片在上傳前不進行壓縮。
預設為:
{ width: 1600, height: 1600, // 圖片質量,只有type為`image/jpeg`的時候才有效。 quality: 90, // 是否允許放大,如果想要生成小圖的時候不失真,此選項應該設定為false. allowMagnify: false, // 是否允許裁剪。 crop: false, // 是否保留頭部meta資訊。 preserveHeaders: true, // 如果發現壓縮後檔案大小比原來還大,則使用原來圖片 // 此屬性可能會影響圖片自動糾正功能 noCompressIfLarger: false, // 單位位元組,如果圖片大小小於此值,不會採用壓縮。 compressSize: 0 }
auto
{Boolean} [可選] [預設值:false]設定為 true 後,不需要手動呼叫上傳,有檔案選擇即開始上傳。runtimeOrder
{Object} [可選] [預設值:html5,flash]指定執行時啟動順序。預設會想嘗試 html5 是否支援,如果支援則使用 html5, 否則則使用 flash.可以將此值設定成 flash
,來強制使用 flash 執行時。prepareNextFile
{Boolean} [可選] [預設值:false]是否允許在檔案傳輸時提前把下一個檔案準備好。 對於一個檔案的準備工作比較耗時,比如圖片壓縮,md5序列化。 如果能提前在當前檔案傳輸期處理,可以節省總體耗時。chunked
{Boolean} [可選] [預設值:false]是否要分片處理大檔案上傳。chunkSize
{Boolean} [可選] [預設值:5242880]如果要分片,分多大一片? 預設大小為5M.chunkRetry
{Boolean} [可選] [預設值:2]如果某個分片由於網路問題出錯,允許自動重傳多少次?threads
{Boolean} [可選] [預設值:3]上傳併發數。允許同時最大上傳程式數。formData
{Object} [可選] [預設值:{}]檔案上傳請求的參數列,每次傳送都會傳送此物件中的引數。fileVal
{Object} [可選] [預設值:'file']設定檔案上傳域的name。method
{Object} [可選] [預設值:'POST']檔案上傳方式,POST
或者GET
。sendAsBinary
{Object} [可選] [預設值:false]是否已二進位制的流的方式傳送檔案,這樣整個上傳內容php://input
都為檔案內容, 其他引數在$_GET陣列中。fileNumLimit
{int} [可選] [預設值:undefined]驗證檔案總數量, 超出則不允許加入佇列。fileSizeLimit
{int} [可選] [預設值:undefined]驗證檔案總大小是否超出限制, 超出則不允許加入佇列。fileSingleSizeLimit
{int} [可選] [預設值:undefined]驗證單個檔案大小是否超出限制, 超出則不允許加入佇列。duplicate
{Boolean} [可選] [預設值:undefined]去重, 根據檔名字、檔案大小和最後修改時間來生成hash Key.disableWidgets
{String, Array} [可選] [預設值:undefined]預設所有 Uploader.register 了的 widget 都會被載入,如果禁用某一部分,請通過此 option 指定黑名單。事件名 | 引數說明 | 描述 |
---|---|---|
dndAccept |
|
阻止此事件可以拒絕某些型別的檔案拖入進來。目前只有 chrome 提供這樣的 API,且只能通過 mime-type 驗證。 |
beforeFileQueued |
|
當檔案被加入佇列之前觸發,此事件的handler返回值為false ,則此檔案不會被新增進入佇列。 |
fileQueued |
|
當檔案被加入佇列以後觸發。 |
filesQueued |
|
當一批檔案新增進佇列以後觸發。 |
fileDequeued |
|
當檔案被移除佇列後觸發。 |
reset |
當 uploader 被重置的時候觸發。 | |
startUpload |
當開始上傳流程時觸發。 | |
stopUpload |
當開始上傳流程暫停時觸發。 | |
uploadFinished |
當所有檔案上傳結束時觸發。 | |
uploadStart |
|
某個檔案開始上傳前觸發,一個檔案只會觸發一次。 |
uploadBeforeSend |
|
當某個檔案的分塊在傳送前觸發,主要用來詢問是否要新增附帶引數,大檔案在開起分片上傳的前提下此事件可能會觸發多次。 |
uploadAccept |
|
當某個檔案上傳到服務端響應後,會派送此事件來詢問服務端響應是否有效。如果此事件handler返回值為false , 則此檔案將派送server 型別的uploadError 事件。 |
uploadProgress |
|
上傳過程中觸發,攜帶上傳進度。 |
uploadError |
|
當檔案上傳出錯時觸發。 |
uploadSuccess |
|
當檔案上傳成功時觸發。 |
uploadComplete |
|
不管成功或者失敗,檔案上傳完成時觸發。 |
error |
|
當validate不通過時,會以派送錯誤事件的形式通知呼叫者。通過upload.on('error', handler) 可以捕獲到此類錯誤,目前有以下錯誤會在特定的情況下派送錯來。
|
獲取或者設定Uploader配置項。
// 初始狀態圖片上傳前不會壓縮 var uploader = new WebUploader.Uploader({ compress: null; }); // 修改後圖片上傳前,嘗試將圖片壓縮到1600 * 1600 uploader.option( 'compress', { width: 1600, height: 1600 });
獲取檔案統計資訊。返回一個包含一下資訊的物件。
successNum
上傳成功的檔案數progressNum
上傳中的檔案數cancelNum
被刪除的檔案數invalidNum
無效的檔案數uploadFailNum
上傳失敗的檔案數queueNum
還在佇列中的檔案數interruptNum
被暫停的檔案數銷燬 webuploader 例項
新增檔案選擇按鈕,如果一個按鈕不夠,需要呼叫此方法來新增。引數跟options.pick一致。
uploader.addButton({ id: '#btnContainer', innerHTML: '選擇檔案' });
生成縮圖,此過程為非同步,所以需要傳入callback
。 通常情況在圖片加入隊裡後呼叫此方法來生成預覽圖以增強互動效果。
當 width 或者 height 的值介於 0 – 1 時,被當成百分比使用。
callback
中可以接收到兩個引數。
注意 Date URL在IE6/7中不支援,所以不用呼叫此方法了,直接顯示一張暫不支援預覽圖片好了。 也可以藉助服務端,將 base64 資料傳給服務端,生成一個臨時檔案供預覽。
uploader.on( 'fileQueued', function( file ) { var $li = ...; uploader.makeThumb( file, function( error, ret ) { if ( error ) { $li.text('預覽錯誤'); } else { $li.append('<img alt="" src="' + ret + '" />'); } }); });
計算檔案 md5 值,返回一個 promise 物件,可以監聽 progress 進度。
uploader.on( 'fileQueued', function( file ) { var $li = ...; uploader.md5File( file ) // 及時顯示進度 .progress(function(percentage) { console.log('Percentage:', percentage); }) // 完成 .then(function(val) { console.log('md5 result:', val); }); });
引數:
files
{Array of File or File} [可選]Files 物件 陣列新增檔案到佇列
removeFile( file ) ⇒ undefined removeFile( id ) ⇒ undefined removeFile( file, true ) ⇒ undefined removeFile( id, true ) ⇒ undefined
引數:
file
{File, id}File物件或這File物件的id移除某一檔案, 預設只會標記檔案狀態為已取消,如果第二個引數為 true
則會從 queue 中移除。
$li.on('click', '.remove-this', function() { uploader.removeFile( file ); })
返回指定狀態的檔案集合,不傳引數將返回所有狀態的檔案。
console.log( uploader.getFiles() ); // => all files console.log( uploader.getFiles('error') ) // => all error files.
重試上傳,重試指定檔案,或者從出錯的檔案開始重新上傳。
function retry() { uploader.retry(); }
排序佇列中的檔案,在上傳之前調整可以控制上傳順序。
重置uploader。目前只重置了佇列。
uploader.reset();
預測Uploader將採用哪個Runtime
開始上傳。此方法可以從初始狀態呼叫開始上傳流程,也可以從暫停狀態呼叫,繼續上傳流程。
可以指定開始某一個檔案。
暫停上傳。第一個引數為是否中斷上傳當前正在上傳的檔案。
如果第一個引數是檔案,則只暫停指定檔案。
引數:
file
{File, id}File物件或這File物件的id標記檔案狀態為已取消, 同時將中斷檔案傳輸。
$li.on('click', '.remove-this', function() { uploader.cancelFile( file ); })
判斷Uplaode
r是否正在上傳中。
掉過一個檔案上傳,直接標記指定檔案為已上傳狀態。
傳送命令。當傳入callback
或者handler
中返回promise
時。返回一個當所有handler
中的promise都完成後完成的新promise
。
引數:
responseMap
{object}API 名稱與函式實現的對映proto
{object}元件原型,建構函式通過 constructor 屬性定義新增元件
Uploader.register({ 'make-thumb': 'makeThumb' }, { init: function( options ) {}, makeThumb: function() {} }); Uploader.register({ 'make-thumb': function() { } });
引數:
name
{string}元件名字刪除外掛,只有在註冊時指定了名字的才能被刪除。
Uploader.register({ name: 'custom', 'make-thumb': function() { } }); Uploader.unRegister('custom');
基礎類,提供一些簡單常用的方法。
建立Uploader例項,等同於new Uploader( opts );
當前版本號。
引用依賴的jQuery或者Zepto物件。
簡單的瀏覽器檢查結果。
webkit
webkit版本號,如果瀏覽器為非webkit核心,此屬性為undefined
。chrome
chrome瀏覽器版本號,如果瀏覽器為chrome,此屬性為undefined
。ie
ie瀏覽器版本號,如果瀏覽器為非ie,此屬性為undefined
。暫不支援ie10+firefox
firefox瀏覽器版本號,如果瀏覽器為非firefox,此屬性為undefined
。safari
safari瀏覽器版本號,如果瀏覽器為非safari,此屬性為undefined
。opera
opera瀏覽器版本號,如果瀏覽器為非opera,此屬性為undefined
。作業系統檢查結果。
android
如果在android瀏覽器環境下,此值為對應的android版本號,否則為undefined
。ios
如果在ios瀏覽器環境下,此值為對應的ios版本號,否則為undefined
。引數:
super
{Class}父類protos
{Object, Function} [可選]子類或者物件。如果物件中包含constructor,子類將是用此屬性值。
constructor
{Function} [可選]子類構造器,不指定的話將建立個臨時的直接執行父類構造器的方法。statics
{Object} [可選]靜態屬性或方法。返回值:
實現類與類之間的繼承。
function Person() { console.log( 'Super' ); } Person.prototype.hello = function() { console.log( 'hello' ); }; var Manager = Base.inherits( Person, { world: function() { console.log( 'World' ); } }); // 因為沒有指定構造器,父類的構造器將會執行。 var instance = new Manager(); // => Super // 繼承子父類的方法 instance.hello(); // => hello instance.world(); // => World // 子類的__super__屬性指向父類 console.log( Manager.__super__ === Person ); // => true
一個不做任何事情的方法。可以用來賦值給預設的callback.
返回一個新的方法,此方法將已指定的context
來執行。
var doSomething = function() { console.log( this.name ); }, obj = { name: 'Object Name' }, aliasFn = Base.bind( doSomething, obj ); aliasFn(); // => Object Name
引用Console.log如果存在的話,否則引用一個空函式noop。
被uncurrythis的陣列slice方法。 將用來將非陣列物件轉化成陣列物件。
function doSomthing() { var args = Base.slice( arguments, 1 ); console.log( args ); } doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"]
生成唯一的ID
引數:
size
{Number}檔案大小pointLength
{Number} [可選] [預設值: 2]精確到的小數點數。[units=[
{Array}'B', 'K', 'M', 'G', 'TB' ]] 單位陣列。從位元組,到千位元組,一直往上指定。如果單位陣列裡面只指定了到了K(千位元組),同時檔案大小大於M, 此方法的輸出將還是顯示成多少K.格式化檔案大小, 輸出成帶單位的字串
console.log( Base.formatSize( 100 ) ); // => 100B console.log( Base.formatSize( 1024 ) ); // => 1.00K console.log( Base.formatSize( 1024, 0 ) ); // => 1K console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB
建立一個Deferred物件。 詳細的Deferred用法說明,請參照jQuery的API文件。
Deferred物件在鉤子回掉函式中經常要用到,用來處理需要等待的非同步操作。
// 在檔案開始傳送前做些非同步操作。 // WebUploader會等待此非同步操作完成後,開始傳送檔案。 Uploader.register({ 'before-send-file': 'doSomthingAsync' }, { doSomthingAsync: function() { var deferred = Base.Deferred(); // 模擬一次非同步操作。 setTimeout(deferred.resolve, 2000); return deferred.promise(); } });
引數:
anything
{*}檢測物件。返回值:
判斷傳入的引數是否為一個promise物件。
console.log( Base.isPromise() ); // => false console.log( Base.isPromise({ key: '123' }) ); // => false console.log( Base.isPromise( Base.Deferred().promise() ) ); // => true // Deferred也是一個Promise console.log( Base.isPromise( Base.Deferred() ) ); // => true
返回一個promise,此promise在所有傳入的promise都完成了後完成。 詳細請檢視這裡。
中介者,它本身是個單例,但可以通過installTo方法,使任何物件具備事件行為。 主要目的是負責模組與模組之間的合作,降低耦合度。
引數:
name
{String}事件名,支援多個事件用空格隔開callback
{Function}事件處理器context
{Object} [可選]事件處理器的上下文。返回值:
繫結事件。
callback
方法在執行時,arguments將會來源於trigger的時候攜帶的引數。如
var obj = {}; // 使得obj有事件行為 Mediator.installTo( obj ); obj.on( 'testa', function( arg1, arg2 ) { console.log( arg1, arg2 ); // => 'arg1', 'arg2' }); obj.trigger( 'testa', 'arg1', 'arg2' );
如果callback
中,某一個方法return false
了,則後續的其他callback
都不會被執行到。 切會影響到trigger
方法的返回值,為false
。
on
還可以用來新增一個特殊事件all
, 這樣所有的事件觸發都會響應到。同時此類callback
中的arguments有一個不同處, 就是第一個引數為type
,記錄當前是什麼事件在觸發。此類callback
的優先順序比腳低,會再正常callback
執行完後觸發。
obj.on( 'all', function( type, arg1, arg2 ) { console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' });
引數:
name
{String}事件名callback
{Function}事件處理器context
{Object} [可選]事件處理器的上下文。返回值:
繫結事件,且當handler執行完後,自動解除繫結。
引數:
name
{String} [可選]事件名callback
{Function} [可選]事件處理器context
{Object} [可選]事件處理器的上下文。返回值:
解除事件繫結
引數:
type
{String}事件名...
{*} [可選]任意引數返回值:
觸發事件
引數:
obj
{Object}需要具備事件行為的物件。返回值:
可以通過這個介面,使任何物件具備事件功能。
引數:
source
{Lib.File}lib.File例項, 此source物件是帶有Runtime資訊的。建構函式
事件名 | 引數說明 | 描述 |
---|---|---|
statuschange |
檔案狀態變化 |
檔名,包括副檔名(字尾)
檔案體積(位元組)
檔案MIMETYPE型別,與檔案型別的對應關係請參考http://t.cn/z8ZnFny
檔案最後修改日期
檔案ID,每個物件具有唯一ID,與檔名無關
副檔名,通過檔名獲取,例如test.png的副檔名為png
狀態文字說明。在不同的status語境下有不同的用途。
引數:
status
{File.Status, String}檔案狀態值statusText
{String} [可選] [預設值: '']狀態說明,常在error時使用,用http, abort,server等來標記是由於什麼原因導致檔案錯誤。設定狀態,狀態變化時會觸發change
事件。
檔案狀態值,具體包括以下幾種型別:
inited
初始狀態queued
已經進入佇列, 等待上傳progress
上傳中complete
上傳完成。error
上傳出錯,可重試interrupt
上傳中斷,可續傳。invalid
檔案不合格,不能重試上傳。會自動從佇列中移除。cancelled
檔案被移除。檔案佇列, 用來儲存各個狀態中的檔案。
統計檔案數。
numOfQueue
佇列中的檔案數。numOfSuccess
上傳成功的檔案數numOfCancel
被取消的檔案數numOfProgress
正在上傳中的檔案數numOfUploadFailed
上傳錯誤的檔案數。numOfInvalid
無效的檔案數。numofDeleted
被移除的檔案數。引數:
file
{File}檔案物件將新檔案加入對佇列尾部
引數:
file
{File}檔案物件將新檔案加入對佇列頭部
引數:
fileId
{String}檔案ID返回值:
獲取檔案物件
引數:
status
{String}檔案狀態值返回值:
從佇列中取出一個指定狀態的檔案。
引數:
fn
{Function}排序方法對佇列進行排序,能夠控制檔案上傳順序。
引數:
status
{String} [可選]檔案狀態值獲取指定型別的檔案列表, 列表中每一個成員為File物件。
引數:
檔案物件。
{File}在佇列中刪除檔案。