書山有路勤為徑,學海無涯苦作舟
Struts2默認使用Jakarta的Common-FileUpload的文件上傳解析器。見struts.properties配置文件中:
實際上,Struts2的文件上傳功能只是在原有的文件上傳項目上做了進一步的封裝,取消了不同文件上傳項目的編程差異而已。
上面的Action和普通的Action沒有任何區別。只是多了幾個屬性而已。如果表單中包含一個name屬性為xxx的文件域,則對應的Action需要使用3個屬性來封裝該文件域的信息:類型為File的xxx屬性封裝了該文件的內容;類型為String的xxxFileName屬性封裝了該文件域對應的文件的文件名;類型為String的xxxContentType屬性封裝了該文件域對應的文件類型。除此之外,配置了savePath來依賴注入文件上傳后的保存地址。具體的Action配置如下:
一般我們上傳文件都不是無限制地上傳的,需要制定一些例如文件類型,文件大小等限制。我們可以通過配置Struts2中的攔截器進行文件過濾。Struts2中文件上傳的攔截器是fileUpload。配置fileUpload攔截器,可以為其指定兩個參數:
allowedTypes:該參數指定允許上傳文件的類型,多了文件類型之間以英文逗號隔開。
maximuxSize:該參數指定允許上傳文件大小,單位是字節。
通過配置fileUpload攔截器,可以輕松地實現文件過濾,當文件過濾失敗后,系統自動轉入input視圖。當然,我們必須顯式地為該Action配置defaultStack的攔截器引用。
如果需要使用Pell上傳, 需要使用插件struts2-pell-multipart-plutin-2.1.6.jar文件。此壓縮包中有一個PellMultiPartRequest類。同時在struts-plugin.xml中有如下Bean配置:
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="pell" class="org.apache.struts2.dispatcher.multipart.PellMultiPartRequest" /> 指明了解析接口的實現類。有了這個聲明,我們只需在struts.xml中顯式地聲明一下sturts.multipart.parser的值為pell即可:
<constant name="struts.multipart.parser" value="pell"/>
說道此處,上傳基本說完了。如果需要同時上傳多了文件,只要將Action中涉及文件上傳的屬性聲明為數組或List即可。
Struts2的文件下載也和普通Action沒有區別,只是返回的是InputStream流而已。
代碼很簡單,關鍵是需要配置stream類型的結果。配置stream類型的結果需要指定如下4個屬性:
posted on 2010-11-07 14:19 Brian 閱讀(475) 評論(0) 編輯 收藏 所屬分類: Struts2