《Ext詳解與實踐》節選 檔案上傳

2021-08-22 18:21:59 字數 4113 閱讀 7173

ext沒提供上傳元件?很多人都會有這疑問。

其實ext.form.textfield就是ext的上傳元件的,只要將其配置引數inputtype設定為「file」就行了。上傳檔案除了檔案輸入框,還有乙個重要的設定,就是需要將form的enctype屬性設定為「multipart/form-data」。這個也很簡單,在定義formpanel的時候加入basicform的配置引數fileupload,並設定為true就行了。

在ext中使用標準上傳方式最大的缺點就是檔案輸入框的寬度很難控制,與介面不是太協調,而且在不同瀏覽器中的顯示是不同的。在ext官方論壇中有很多替代辦法,筆者比較喜歡的是swfupload。

swfupload使用flash作為上傳元件,檔案選擇可以設定為單選,也可以設定多選,而且可以控制選擇檔案的型別。執行檔案選擇不依賴於標準檔案輸入框,可以使用按鈕、鏈結等多種方式執行,從而可以根據需要設定介面。swfupload的提交不依賴form,其模式類似於ajax提交,可以很容易的實現對上傳的控制和顯示上傳進度。

swfupload的官方位址是:

。在swfupload中有兩個主要物件:file和stats。

file物件主要是儲存檔案的一些基本資訊,其結構如下:

stats物件主要提供上傳佇列中的資訊,其結構如下:

表1列出了swfupload的主要配置引數。

表1 swfupload的主要配置引數

引數型別

描述upload_url

字串檔案上傳位址

flash_url

字串swfupload使用的flash檔案的絕對位址或相對位址

file_size_limit

字串限制上傳檔案的大小

格式為:值+單位

允許的單位有b、kb、mb和gb。如果不設定單位,則預設單位為kb

如果設定為0則無限制

file_upload_limit 數字

允許上傳的檔案數量,該值表示的是在上傳頁面沒有被銷毀前允許上傳的檔案數量。預設值為0,表示沒有限制

file_queue_limit 數字

在一次上傳過程中允許上傳的檔案數量,預設值為0,表示無限制

file_types

字串限制上傳檔案的型別。使用分號分隔各型別

例如:「*.jpg;*.gif」表示只允許上傳擴充套件名為jpg和gif的檔案

file_post_name

字串伺服器端接收檔案的變數名,本屬性只在flash 9版本有效

requeue_on_error

布林值設定為true則當檔案上傳錯誤時重新返回佇列等待上傳,設定為false則不再上傳

post_params 物件

json格式的與檔案一起上傳的引數,flash 8版本不支援

file_types_description

字串在檔案選擇對話方塊顯示的文字描述

flash_color

顏色值設定包含flash的html標籤的背景顏色,預設值是「#ffffff」

debug

布林值設定為true則顯示除錯

file_queued_handler 函式

當選擇檔案對話方塊關閉時執行該函式,函式會傳入乙個file物件

upload_start_handler 函式

檔案開始上傳時執行該函式,函式會傳入乙個file物件

upload_progress_handler 函式

通過該函式顯示上傳進度,函式傳入乙個file物件與檔案已上傳的位元組數

upload_success_handler 函式

單個檔案上傳成功時執行該函式,函式傳入乙個file物件與伺服器端返回的資訊

upload_error_handler 函式

單個檔案上傳失敗或中斷時執行該函式,函式傳入乙個file物件、錯誤**與錯誤資訊

file_queue_error_handler 函式

檔案未能加入佇列時執行該函式,函式傳入乙個file物件、錯誤**與錯誤資訊

表2列出了swfupload的主要方法。

表2swfupload的主要方法

方法描述

selectfile

功能:開啟選擇檔案對話方塊,但允許選擇乙個檔案

語法:selectfile()

引數: 無

返回值:無

例子:swfu.selectfile()

selectfiles

功能:開啟選擇檔案對話方塊,允許選擇多個檔案

語法:selectfiles()

引數: 無

返回值:無

例子:swfu.selectfiles()

startupload

功能:開始上傳檔案

語法:startupload ([file_id])

引數:file_id:可選值,要上傳的檔案編號,如果不設定則上傳佇列裡的第乙個檔案

返回值:無

例子:swfu.startupload ()

cancelupload

功能:取消上傳某個檔案

語法:cancelupload ([file_id])

引數:file_id:可選值,要取消上傳的檔案編號,如果不設定則上傳佇列裡的第乙個檔案取消上傳

返回值:無

例子:swfu.cancelupload ()

stopupload

功能:中止上傳

語法:stopupload ()

引數: 無

返回值:無

例子:swfu.stopupload ()

getstats

功能:返回當前上傳狀態

語法:getstats ()

引數: 無

返回值:stats物件

例子:vat stats=swfu.getstats ()

setpostparams

功能:設定提交的附加引數

語法:setpostparams(param_object)

引數:param_object:乙個json物件

返回值:無

例子:swfu. setpostparams()

該例子附加了兩個提交引數,乙個為id,值為1,乙個為title,值為標題

要使用swfupload,需要在頁面載入swfupload.js檔案並設定好引數,尤其要注意flash檔案的路徑。具體使用方法請看下面例子:

3c//dtd html 4.01//en" "">

執行操作:

例子中使用了兩種方式實現檔案上傳,一種是標準方式,使用form提交,一種使用swfupload。

標準方式的定義比較簡單,在formpanel定義中加入fileupload引數並設定為true,然後將乙個textfield的inputtype設定為file就行了。儲存的提交方式與一般的form提交沒什麼區別。

swfupload的定義稍微複雜一點。首先在onready函式外定義了乙個swfu的全域性變數,主要目的是使swfu成為乙個全域性的swfupload例項,以便在內部函式中能使用該例項。

本例子使用的flash 9版本,而且swf檔案與頁面檔案在同一目錄,所以設定flash_url為swfupload_f9.swf。允許上傳的檔案大小限制為10兆,只能上傳jpg和gif檔案,伺服器端接收檔案的引數名稱為filedata。

在file_queued_handler函式中先判別上傳檔案的副檔名是否符合要求,如果符合則執行startupload方法開始上傳檔案。

upload_start_handler函式在檔案開始時顯示乙個ext進度條。

upload_progress_handler函式則根據已上傳位元組數計算上傳進度並更新進度條。

upload_success_handler函式根據伺服器端返回資訊更新頁面顯示,並判斷上傳佇列中是否還有檔案未上傳,如果有則繼續上傳。

upload_error_handler函式與file_queue_error_handler函式則在發生錯誤時顯示錯誤資訊。

在formpanel中有兩個按鈕,乙個用來演示上傳單檔案,乙個用來演示上傳多檔案。單擊後先根據標題輸入框的值,設定乙個附加提交引數title,然後執行selectfile方法或selectfiles方法開啟檔案選擇對話方塊。對話方塊關閉後執行file_queued_handler函式開始上傳檔案。

檔案上傳後會在id為「'imagepane'」的panel顯示上傳的縮圖。執行操作中也會顯示返回的結果。

下面

《Ext實戰》節選 檔案上傳

ext實戰 節選 檔案上傳 ext沒提供上傳元件?很多人都會有這疑問。其實ext.form.textfield就是ext的上傳元件的,只要將其配置引數inputtype設定為 file 就行了。上傳檔案除了檔案輸入框,還有乙個重要的設定,就是需要將form的enctype屬性設定為 multipar...

《Ext詳解與實踐》節選 自定義單元格的顯示格式

rel file list href file c 5cdocume 7e1 5cadmini 7e1 5clocals 7e1 5ctemp 5cmsohtml1 5c01 5cclip filelist.xml rel edit time data href file c 5cdocume 7e...

《Ext詳解與實踐》節選 自定義單元格的顯示格式

有時候,需要在 grid 中顯示乙個鏈結,或根據數字的大小顯示不同的顏色,又或者使用固定格式顯示記錄編號等,這就需要自定義單元格的顯示格式。在 ext的 grid 可以很容易的實現自定義單元格的顯示格式。在定義 grid 的columnmodel 的時候,在需要自定義顯示格式的列中加入引數 rend...