日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ajax上传plupload的使用

發布時間:2024/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ajax上传plupload的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

前端上傳組件Plupload使用指南

我之前寫過一篇文章《文件上傳利器SWFUpload使用指南》,里面介紹了上傳組件SWFUpload的使用方法,但現在隨著html5技術的逐漸推廣和普及,再去使用以flash為上傳手段的SWFUpload顯然就有點過時了,畢竟html5原生的就給我們提供了文件上傳的API。Plupload是一款由著名的web編輯器TinyMCE團隊開發的上傳組件,簡單易用且功能強大,我們完全可以使用Plupload來代替以前的SWFUpload。

Plupload有以下功能和特點:

1、擁有多種上傳方式:HTML5、flash、silverlight以及傳統的<input type=”file” />。Plupload會自動偵測當前的環境,選擇最合適的上傳方式,并且會優先使用HTML5的方式。所以你完全不用去操心當前的瀏覽器支持哪些上傳方式,Plupload會自動為你選擇最合適的方式。

2、支持以拖拽的方式來選取要上傳的文件

3、支持在前端壓縮圖片,即在圖片文件還未上傳之前就對它進行壓縮

4、可以直接讀取原生的文件數據,這樣的好處就是例如可以在圖片文件還未上傳之前就能把它顯示在頁面上預覽

5、支持把大文件切割成小片進行上傳,因為有些瀏覽器對很大的文件比如幾G的一些文件無法上傳。

?

Plupload的使用方法也與SWFUpload非常類似,可以分為以下幾步:

1、引入js文件,plupload的源文件可以到github上去下載

2、實例化一個plupload對象,傳入一個配置參數對象進行各方面的配置。

3、調用plupload實例對象的init()方法進行初始化

4、在plupload實例對象上注冊各種你需要的事件。plupload從選取文件到文件上傳完成這個過程中,會觸發很多事件。我們可以通過這些事件來跟plupload進行交互。

5、實現你自己所注冊的那些事件的監聽函數,利用這些監聽函數來進行更新UI、提示上傳進度等工作。

大家可以到http://chaping.github.io/plupload/demo/看一下我寫的關于plupload的幾個上傳demo。

下面用一段代碼來說明Plupload的使用方法。

首先看下我的目錄結構

index.html的代碼如下:

<!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>Plupload使用指南</title><!-- 首先需要引入plupload的源代碼 --><script src="js/plupload.full.min.js"></script> </head> <body><!-- 這里我們只使用最基本的html結構:一個選擇文件的按鈕,一個開始上傳文件的按鈕(甚至該按鈕也可以不要) --><p><button id="browse">選擇文件</button><button id="start_upload">開始上傳</button></p><script>//實例化一個plupload上傳對象var uploader = new plupload.Uploader({browse_button : 'browse', //觸發文件選擇對話框的按鈕,為那個元素idurl : 'upload.php', //服務器端的上傳頁面地址flash_swf_url : 'js/Moxie.swf', //swf文件,當需要使用swf方式進行上傳時需要配置該參數silverlight_xap_url : 'js/Moxie.xap' //silverlight文件,當需要使用silverlight方式進行上傳時需要配置該參數}); //在實例對象上調用init()方法進行初始化uploader.init();//綁定各種事件,并在事件監聽函數中做你想做的事uploader.bind('FilesAdded',function(uploader,files){//每個事件監聽函數都會傳入一些很有用的參數,//我們可以利用這些參數提供的信息來做比如更新UI,提示上傳進度等操作});uploader.bind('UploadProgress',function(uploader,file){//每個事件監聽函數都會傳入一些很有用的參數,//我們可以利用這些參數提供的信息來做比如更新UI,提示上傳進度等操作});//......//......//最后給"開始上傳"按鈕注冊事件document.getElementById('start_upload').onclick = function(){uploader.start(); //調用實例對象的start()方法開始上傳文件,當然你也可以在其他地方調用該方法}</script> </body> </html>

?

使用Plupload的關鍵是了解它眾多的配置參數、事件以及屬性和方法。我把它官網上的文檔翻譯成了中文并整理如下。我也把它放到了github上,你可以到http://chaping.github.io/plupload/doc/去查閱。

目錄:

一、配置參數

二、各種事件說明

三、Plupload實例的屬性

四、Plupload實例的方法

五、文件對象的屬性和方法

六、QueueProgress 對象的屬性

七、plupload命名空間上的一些屬性

一、配置參數

實例化一個plupload對象時,也就是?new plupload.Uploader(),需要傳入一個對象作為配置參數。后面內容中出現的plupload實例均是指new plupload.Uploader()得到的實例對象

屬性類型默認值描述browse_buttonurlfiltersheadersmultipartmultipart_paramsmax_retrieschunk_sizeresizedrop_elementmulti_selectionrequired_featuresunique_namesruntimesfile_data_namecontainerflash_swf_urlsilverlight_xap_url
String / DOM?觸發文件選擇對話框的DOM元素,當點擊該元素后便后彈出文件選擇對話框。該值可以是DOM元素對象本身,也可以是該DOM元素的id
String?服務器端接收和處理上傳文件的腳本地址,可以是相對路徑(相對于當前調用Plupload的文檔),也可以是絕對路徑
Object{ }可以使用該參數來限制上傳文件的類型,大小等,該參數以對象的形式傳入,它包括三個屬性:

mime_types:用來限定上傳文件的類型,為一個數組,該數組的每個元素又是一個對象,該對象有title和extensions兩個屬性,title為該過濾器的名稱,extensions為文件擴展名,有多個時用逗號隔開。該屬性默認為一個空數組,即不做限制。

max_file_size:用來限定上傳文件的大小,如果文件體積超過了該值,則不能被選取。值可以為一個數字,單位為b,也可以是一個字符串,由數字和單位組成,如'200kb'

prevent_duplicates:是否允許選取重復的文件,為true時表示不允許,為false時表示允許,默認為false。如果兩個文件的文件名和大小都相同,則會被認為是重復的文件

filters完整的配置示例如下(當然也可以只配置其中的某一項):

filters: {mime_types : [ //只允許上傳圖片和zip文件{ title : "Image files", extensions : "jpg,gif,png" }, { title : "Zip files", extensions : "zip" }],max_file_size : '400kb', //最大只能上傳400kb的文件prevent_duplicates : true //不允許選取重復文件 }
Object?設置上傳時的自定義頭信息,以鍵/值對的形式傳入,鍵代表頭信息屬性名,鍵代表屬性值。html4上傳方式不支持設置該屬性。
Booleantrue為true時將以multipart/form-data的形式來上傳文件,為false時則以二進制的格式來上傳文件。html4上傳方式不支持以二進制格式來上傳文件,在flash上傳方式中,二進制上傳也有點問題。并且二進制格式上傳還需要在服務器端做特殊的處理。一般我們用multipart/form-data的形式來上傳文件就足夠了。
Object?上傳時的附加參數,以鍵/值對的形式傳入,服務器端可是使用$_POST來獲取這些參數(以php為例)。比如: multipart_params: {one: '1',two: '2',three: { //值還可以是一個字面量對象a: '4',b: '5'},four: ['6', '7', '8'] //也可以是一個數組 }
Number0當發生plupload.HTTP_ERROR錯誤時的重試次數,為0時表示不重試
Number/String0分片上傳文件時,每片文件被切割成的大小,為數字時單位為字節。也可以使用一個帶單位的字符串,如"200kb"。當該值為0時表示不使用分片上傳功能
Object?可以使用該參數對將要上傳的圖片進行壓縮,該參數是一個對象,里面包括5個屬性:

width:指定壓縮后圖片的寬度,如果沒有設置該屬性則默認為原始圖片的寬度

height:指定壓縮后圖片的高度,如果沒有設置該屬性則默認為原始圖片的高度

crop:是否裁剪圖片

quality:壓縮后圖片的質量,只對jpg格式的圖片有效,默認為90。quality可以跟width和height一起使用,但也可以單獨使用,單獨使用時,壓縮后圖片的寬高不會變化,但由于質量降低了,所以體積也會變小

preserve_headers:壓縮后是否保留圖片的元數據,true為保留,false為不保留,默認為true。刪除圖片的元數據能使圖片的體積減小一點點

resize參數的配置示例如下:

resize: {width: 100,height: 100,crop: true,quality: 60,preserve_headers: false }
DOM/String/Array?指定了使用拖拽方式來選擇上傳文件時的拖拽區域,即可以把文件拖拽到這個區域的方式來選擇文件。該參數的值可以為一個DOM元素的id,也可是DOM元素本身,還可以是一個包括多個DOM元素的數組。如果不設置該參數則拖拽上傳功能不可用。目前只有html5上傳方式才支持拖拽上傳。
Booleantrue是否可以在文件瀏覽對話框中選擇多個文件,true為可以,false為不可以。默認true,即可以選擇多個文件。需要注意的是,在某些不支持多選文件的環境中,默認值是false。比如在ios7的safari瀏覽器中,由于存在bug,造成不能多選文件。當然,在html4上傳方式中,也是無法多選文件的。
Mix?可以使用該參數來設置你必須需要的一些功能特征,Plupload會根據你的設置來選擇合適的上傳方式。因為,不同的上傳方式,支持的功能是不同的,比如拖拽上傳只有html5上傳方式支持,圖片壓縮則只有html5,flash,silverlight上傳方式支持。該參數的值是一個混合類型,可以是一個以逗號分隔的字符串,
Booleanfalse當值為true時會為每個上傳的文件生成一個唯一的文件名,并作為額外的參數post到服務器端,參數明為name,值為生成的文件名。
Stringhtml5,flash,
silverlight,
html4
用來指定上傳方式,指定多個上傳方式請使用逗號隔開。一般情況下,你不需要配置該參數,因為Plupload默認會根據你的其他的參數配置來選擇最合適的上傳方式。如果沒有特殊要求的話,Plupload會首先選擇html5上傳方式,如果瀏覽器不支持html5,則會使用flash或silverlight,如果前面兩者也都不支持,則會使用最傳統的html4上傳方式。如果你想指定使用某個上傳方式,或改變上傳方式的優先順序,則你可以配置該參數。
Stringfile指定文件上傳時文件域的名稱,默認為file,例如在php中你可以使用$_FILES['file']來獲取上傳的文件信息
DOM/String?用來指定Plupload所創建的html結構的父容器,默認為前面指定的browse_button的父元素。該參數的值可以是一個元素的id,也可以是DOM元素本身。
Stringjs/Moxie.swfflash上傳組件的url地址,如果是相對路徑,則相對的是調用Plupload的html文檔。當使用flash上傳方式會用到該參數。
Stringjs/Moxie.xapsilverlight上傳組件的url地址,如果是相對路徑,則相對的是調用Plupload的html文檔。當使用silverlight上傳方式會用到該參數。

二、各種事件說明

要了解plupload的運行狀況,靠的就是在這些事件了

InitPostInitOptionChangedRefreshStateChangedUploadFileBeforeUploadQueueChangedUploadProgressFilesRemovedFileFilteredFilesAddedFileUploadedChunkUploadedUploadCompleteErrorDestroy
當Plupload初始化完成后觸發

監聽函數參數:(uploader)

uploader為當前的plupload實例對象

當Init事件發生后觸發

監聽函數參數:(uploader)

uploader為當前的plupload實例對象

當使用Plupload實例的setOption()方法改變當前配置參數后觸發

監聽函數參數:(uploader,option_name,new_value,old_value)

uploader為當前的plupload實例對象,option_name為發生改變的參數名稱,new_value為改變后的值,old_value為改變前的值

當調用plupload實例的refresh()方法后會觸發該事件,暫時不清楚還有什么其他動作會觸發該事件,但據我測試,把文件添加到上傳隊列后也會觸發該事件。

監聽函數參數:(uploader)

uploader為當前的plupload實例對象

當上傳隊列的狀態發生改變時觸發

監聽函數參數:(uploader)

uploader為當前的plupload實例對象

當上傳隊列中某一個文件開始上傳后觸發

監聽函數參數:(uploader,file)

uploader為當前的plupload實例對象,file為觸發此事件的文件對象

當隊列中的某一個文件正要開始上傳前觸發

監聽函數參數:(uploader,file)

uploader為當前的plupload實例對象,file為觸發此事件的文件對象

當上傳隊列發生變化后觸發,即上傳隊列新增了文件或移除了文件。QueueChanged事件會比FilesAdded或FilesRemoved事件先觸發

監聽函數參數:(uploader)

uploader為當前的plupload實例對象

會在文件上傳過程中不斷觸發,可以用此事件來顯示上傳進度

監聽函數參數:(uploader,file)

uploader為當前的plupload實例對象,file為觸發此事件的文件對象

當文件從上傳隊列移除后觸發

監聽函數參數:(uploader,files)

uploader為當前的plupload實例對象,files為一個數組,里面的元素為本次事件所移除的文件對象

暫不清楚該事件的意義,但根據測試得出,該事件會在每一個文件被添加到上傳隊列前觸發

監聽函數參數:(uploader,file)

uploader為當前的plupload實例對象,file為觸發此事件的文件對象

當文件添加到上傳隊列后觸發

監聽函數參數:(uploader,files)

uploader為當前的plupload實例對象,files為一個數組,里面的元素為本次添加到上傳隊列里的文件對象

當隊列中的某一個文件上傳完成后觸發

監聽函數參數:(uploader,file,responseObject)

uploader為當前的plupload實例對象,file為觸發此事件的文件對象,responseObject為服務器返回的信息對象,它有以下3個屬性:

response:服務器返回的文本

responseHeaders:服務器返回的頭信息

status:服務器返回的http狀態碼,比如200

當使用文件小片上傳功能時,每一個小片上傳完成后觸發

監聽函數參數:(uploader,file,responseObject)

uploader為當前的plupload實例對象,file為觸發此事件的文件對象,responseObject為服務器返回的信息對象,它有以下5個屬性:

offset:該文件小片在整體文件中的偏移量

response:服務器返回的文本

responseHeaders:服務器返回的頭信息

status:服務器返回的http狀態碼,比如200

total:該文件(指的是被切割成了許多文件小片的那個文件)的總大小,單位為字節

當上傳隊列中所有文件都上傳完成后觸發

監聽函數參數:(uploader,files)

uploader為當前的plupload實例對象,files為一個數組,里面的元素為本次已完成上傳的所有文件對象

當發生錯誤時觸發

監聽函數參數:(uploader,errObject)

uploader為當前的plupload實例對象,errObject為錯誤對象,它至少包含以下3個屬性(因為不同類型的錯誤,屬性可能會不同):

code:錯誤代碼,具體請參考plupload上定義的表示錯誤代碼的常量屬性

file:與該錯誤相關的文件對象

message:錯誤信息

當調用destroy方法時觸發

監聽函數參數:(uploader)

uploader為當前的plupload實例對象

三、Plupload實例的屬性

屬性描述idstateruntimefilessettingstotal
Plupload實例的唯一標識id
當前的上傳狀態,可能的值為plupload.STARTED或plupload.STOPPED,該值由Plupload實例的stop()或statr()方法控制。默認為plupload.STOPPED
當前使用的上傳方式
當前的上傳隊列,是一個由上傳隊列中的文件對象組成的數組
當前的配置參數對象
表示總體進度信息的QueueProgress對象

四、Plupload實例的方法

方法描述init()setOption(option, [value])getOption([option])refresh()start()stop()disableBrowse(disable)getFile(id)addFile(file, [fileName])removeFile(file)splice(start, length)trigger(name, Multiple)hasEventListener(name)bind(name, func, scope)unbind(name, func)unbindAll()destroy()
初始化Plupload實例
設置某個特定的配置參數,option為參數名稱,value為要設置的參數值。option也可以為一個由參數名和參數值鍵/值對組成的對象,這樣就可以一次設定多個參數,此時該方法的第二個參數value會被忽略。
獲取當前的配置參數,參數option為需要獲取的配置參數名稱,如果沒有指定option,則會獲取所有的配置參數
刷新當前的plupload實例,暫時還不明白什么時候需要使用
開始上傳隊列中的文件
停止隊列中的文件上傳
禁用或啟用plupload的文件瀏覽按鈕,參數disable為true時為禁用,為false時為啟用。默認為true
通過id來獲取文件對象
向上傳隊列中添加文件,如果成功添加了文件,會觸發FilesAdded事件。參數file為要添加的文件,可以是一個原生的文件,或者一個plupload文件對象,或者一個input[type="file"]元素,還可以是一個包括前面那幾種東西的數組;fileName為給該文件指定的名稱
從上傳隊列中移除文件,參數file為plupload文件對象或先前指定的文件名稱
從上傳隊列中移除一部分文件,start為開始移除文件在隊列中的索引,length為要移除的文件的數量,該方法的返回值為被移除的文件。該方法會觸發FilesRemoved?和QueueChanged事件
觸發某個事件。name為要觸發的事件名稱,Multiple為傳給該事件監聽函數的參數,是一個對象
用來判斷某個事件是否有監聽函數,name為事件名稱
給某個事件綁定監聽函數,name為事件名,func為監聽函數,scope為監聽函數的作用域,也就是監聽函數中this的指向
移除事件的監聽函數,name為事件名稱,func為要移除的監聽函數
移除所有事件的所有監聽函數
銷毀plupload實例

五、文件對象的屬性和方法

在很多事件監聽函數中,都會提供文件對象給你

屬性/方法描述idnametypesizeorigSizeloadedpercentstatuslastModifiedDategetNative()getSource()destroy()
文件id
文件名,例如"myfile.gif"
文件類型,例如"image/jpeg"
文件大小,單位為字節,當啟用了客戶端壓縮功能后,該值可能會改變
文件的原始大小,單位為字節
文件已上傳部分的大小,單位為字節
文件已上傳部分所占的百分比,如50就代表已上傳了50%
文件的狀態,可能為以下幾個值之一:plupload.QUEUED,?plupload.UPLOADING,?plupload.FAILED,?plupload.DONE
文件最后修改的時間
獲取原生的文件對象
獲取mOxie.File 對象,想了解mOxie是什么東西,可以看下https://github.com/moxiecode/moxie/wiki/API
銷毀文件對象

六、QueueProgress 對象的屬性

plupload實例的total屬性是一個QueueProgress對象

屬性描述sizeloadeduploadedfailedqueuedpercentbytesPerSec
上傳隊列中所有文件加起來的總大小,單位為字節
隊列中當前已上傳文件加起來的總大小,單位為字節
已完成上傳的文件的數量
上傳失敗的文件數量
隊列中剩下的(也就是除開已經完成上傳的文件)需要上傳的文件數量
整個隊列的已上傳百分比,如50就代表50%
上傳速率,單位為 byte/s,也就是 字節/秒

七、plupload命名空間上的一些屬性

plupload的命名空間上有一些屬性,用來表示一些常量。記住,不是plupload實例的屬性,而是plupload的屬性

屬性名稱描述VERSIONSTOPPEDSTARTEDQUEUEDUPLOADINGFAILEDDONEGENERIC_ERRORHTTP_ERRORIO_ERRORSECURITY_ERRORINIT_ERRORFILE_SIZE_ERRORFILE_EXTENSION_ERRORFILE_DUPLICATE_ERRORIMAGE_FORMAT_ERRORIMAGE_MEMORY_ERRORIMAGE_DIMENSIONS_ERROR
當前plupload的版本號
值為1,代表上傳隊列還未開始上傳或者上傳隊列中的文件已經上傳完畢時plupload實例的state屬性值
值為2,代表隊列中的文件正在上傳時plupload實例的state屬性值
值為1,代表某個文件已經被添加進隊列等待上傳時該文件對象的status屬性值
值為2,代表某個文件正在上傳時該文件對象的status屬性值
值為4,代表某個文件上傳失敗后該文件對象的status屬性值
值為5,代表某個文件上傳成功后該文件對象的status屬性值
值為-100,發生通用錯誤時的錯誤代碼
值為-200,發生http網絡錯誤時的錯誤代碼,例如服務氣端返回的狀態碼不是200
值為-300,發生磁盤讀寫錯誤時的錯誤代碼,例如本地上某個文件不可讀
值為-400,發生因為安全問題而產生的錯誤時的錯誤代碼
值為-500,初始化時發生錯誤的錯誤代碼
值為-600,當選擇的文件太大時的錯誤代碼
值為-601,當選擇的文件類型不符合要求時的錯誤代碼
值為-602,當選取了重復的文件而配置中又不允許有重復文件時的錯誤代碼
值為-700,發生圖片格式錯誤時的錯誤代碼
當發生內存錯誤時的錯誤代碼
值為-702,當文件大小超過了plupload所能處理的最大值時的錯誤代碼

?

綁定相關事件

uploader.bind('UploadProgress', function(up, file) { $(file.id).getElementsByTagName('b')[0].innerHTML = '' + file.percent + "%"; });

?

?

?

?

?

轉載于:https://my.oschina.net/xwzj/blog/818421

總結

以上是生活随笔為你收集整理的ajax上传plupload的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。