




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、開始Struts 2 第七章 struts2的上傳下載序 文件上傳是Web應用經常需要面對的問題,在大部分時候,用戶的請求參數(shù)是在表單域輸入的字符串,但如果為表單元素設置enctype="multipart/form-data”屬性,則提交表單時不再以字符串方式提交請求參數(shù),而是以二進制編碼的方式提交請求,此時直接通過HttpServletRequest的getParamete:方法無法正常獲取請求參數(shù)的值,我們可以通過二進制流來獲取請求內容通過這種方式,就可以取得希望上傳文件的內容,從而實現(xiàn)文件的上傳。推薦精選 Struts 2 未提供自己的請求解析器,也就是說,Struts 2不
2、會自己去處理multipart/form-data的請求,它需要調用其他請求解析器,將HTTP請求中的表單域解析出來。但Struts 2在原有的上傳解析器基礎上做了進一步封裝,更進一步簡化了文件上傳。 在Struts 2的perties配置文件中,我們看到了下面的配置代碼,它們主要用于配置Struts 2上傳文件時的卜傳解析器。 #指定使用cos的文件上傳解析器 # struts.multipart .parser=cos #指定使用Pell的文件上傳解析器 #struts.multipart.parser=pell #Struts 2默認使用Jakarta的Common-
3、FileUpload的文件上傳解析器 struts.multpart .parser=jakartaStruts 2默認使用的是Jakarta的Common-FileUpload的文件上傳框架,要使用Struts 2的文件上傳功能,則需要在Web應用中增加兩個commons-io-1.3. l .ja:和commons-fileupload-1.2. jar文件上傳例子:上傳頁面uload.jsp<form action="Upload.action" method="post" enctype="multipart/form-data&
4、quot;> 文件描述:<input type="text" name="fileDesc" /><br> <input type="file" name="file" /><br> <input type="submit" value="上傳" /><br> </form>上傳的actionprivate String fileDesc;/和前臺的是同一個private File fi
5、le;/這是IO的File,回顧下strust1.x的FormFile/這兩個字段是被注入進來的,前臺頁面并沒有這兩個表單域private String fileFileName;private String fileContentType;/* * 獲得保存的路徑 */private String getSaveDir()return ServletActionContext.getServletContext().getRealPath("/userDatas");Overridepublic String execute() throws Exception Syst
6、em.out.println("#"+file.getName();System.out.println(""+fileFileName);System.out.println("#"+fileDesc);System.out.println("#"+fileContentType);File targetFile =new File(getSaveDir()+"/"+fileFileName);file.renameTo(targetFile);return "uploadOK&qu
7、ot;推薦精選配置文件:struts.xml<package name="com.huaxia.struts2.action" extends="struts-default"> <action name="Upload" class="com.huaxia.struts2.action.Upload"> <result name="uploadOK">/uploadOK.jsp</result> </action></packa
8、ge> 值得注意的是,上面的Action還包含了兩個屬性:uploadFileName和uploadContentType,這兩個屬性分別用于封裝上傳文件的文件名、上傳文件的文件類型。這兩個屬性,體現(xiàn)了Struts 2設計的靈巧、簡化之處,Action類直接通過File類型屬性直接封裝了上傳文件的文件內容,但這個File屬性無法獲取上傳文件的文件名和文件類型,所以Struts 2直接將文件域中包含的上傳文件名和文件類型的信息封裝到fileFileName和fileContentType屬性中??梢哉J為:如果表單中包含一個name屬性為xxx的文件域,則對應Action需要使用3個屬性來封
9、裝該文件域的信息:n .類型為File的xxx屬性封裝了該文件域對應的文件內容。這是臨時文件,在action調用execute后臨時文件會被刪除n ·類型為String的xxxFileName屬性封裝了該文件域對應的文件的文件名。n ·類型為String的xxxContentType屬性封裝了該文件域對應的文件的文件類型。如果要搞清楚struts的上傳機制,我們可以打開strust中fileupload攔截器的源代碼上傳的其他處理:1. 限制文件的大小2. 限制文件的上傳類型3. 上傳臨時目錄的設定限制文件的大小在struts2的默認大小是2M,我們可以打開struts.p
10、roperites,查看相關設置,然后在struts.xml將相關設置覆蓋掉:# Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data# struts.multipart.parser=cos# struts.multipart.parser=pellstruts.multipart.parser=jakarta# uses javax.servlet.context.tempdir by defaultstruts.multipart.saveDir=struts.multip
11、art.maxSize=2097152覆蓋后:<struts><constant name="struts.multipart.saveDir" value="/upTemp" /><constant name="struts.multipart.maxSize" value="4194304" /><package name="com.huaxia.struts2.action" extends="struts-default"&g
12、t; <action name="Upload" class="com.huaxia.struts2.action.Upload"> <result name="uploadOK">/uploadOK.jsp</result> </action></package></struts> 推薦精選這里要強調的是,我們雖然設置了文件的臨時目錄,而且struts2在上傳動作完畢后會自動執(zhí)行刪除,但這個自動刪除不一定每次都能刪除成功的,所以struts2設定了一個filte
13、r,用來每隔一段時間檢測臨時目錄,如果有文件則去刪除,filter的配置如下<!- 配置Struts2的C1eanUp的Filter -><filter><filter-name>struts-cleanup</filter-name><filter-class>org.apache struts2.dispatcher.ActionContextCleanUp</filter-class></filter><!- 定義Struts2的C1eanUp Filter攔截的URL-><filter
14、-mapping><filter-name>struts-cleanup</filter-name><url-pattern>/*</url-pattern></filter-mapping>限制文件的類型在查看fileupload的攔截器源代碼時,我們發(fā)現(xiàn)如下兩個屬性:1. allowedTypes2. maximumSize從字面猜測就是允許的上傳類型和允許的上傳大小,我們可以覆蓋掉這兩個的配置:<package name="com.huaxia.struts2.action" extends=&q
15、uot;struts-default"> <action name="Upload" class="com.huaxia.struts2.action.Upload"> <interceptor-ref name="fileUpload" > <!- 這里是可以上傳文件的擴展名 -> <param name="allowedExtensions">jpg,gif,png</param> <!- 這里是memi類型,在tomcat的配置
16、文件下可以找到很全的memi類型 -> <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg ,image/x-png,image/pjpeg </param> <param name="maximumSize">4194304</param> </interceptor-ref> <interceptor-ref name="defaultStack" />
17、; <result name="uploadOK">/uploadOK.jsp</result> <result name="input">/upload.jsp</result> </action></package>注意如果我們設置了攔截器,就要將默認的攔截器棧也加上,在攔截器章節(jié)講過錯誤信息顯示:當上傳文件出現(xiàn)錯誤時,我們設定了“input”為上傳頁面,即出現(xiàn)錯誤的話,回到上傳頁面,我們在上傳頁面稍作修改,添加如下代碼:<s:fielderror />我們上傳一個錯
18、誤類型的文件,發(fā)現(xiàn):推薦精選如果要自定義消息內容的話:我們就要加入消息資源文件了,首先在struts.xml中加入:<constant name="struts.custom.i18n.resources" value="Resource" />然后,在src下添加Rperties資源文件,輸入以下消息:struts.messages.error.file.too.large=The File 1 is too large :3 bstruts.messages.error.content.type.not.allowe
19、d=The File :1 is not supportedstruts.messages.error.file.extension.not.allowed=The File : 1 s extension is not supported關于key的來源和占位符的替代值可以參看fileupload攔截器的源代碼的acceptFile方法同時上傳多個文件:同時上傳多個文件和上傳單個文件的過程是一模一樣的,只不過要滿足以下條件:1. 前臺可以將多個文件域的name屬性設置成一樣2. 在action中用數(shù)組或List來接收前臺的File3. 循環(huán)數(shù)組或list,對每個File對象進行操作文件的下載
20、:Struts下載主要是配置好一個result,這個result的類型是“stream”類型的,可去struts-default.xml查找相應的源代碼:這里只貼出下載的代碼和配置:Action/告訴瀏覽器數(shù)據(jù)是以下載的形式接收推薦精選private String contentType="application/x-msdownload"/告訴瀏覽器數(shù)據(jù)將要下載的文件的文件名private String contentDisposition="attachment;filename="/設置服務器讀取文件的緩沖區(qū)大小private String bufferSize="2048"/前臺提交過來需要下載的文件的文件名、路徑private String fnamepath;Overridepublic String execute() throws Exception File temp = new File(fnamepath);this.contentDisposition+=temp.getName();return "down" /* * 此方法將文件多對應的讀取流拿到,getFile是和配置文件中inputName對應的 */public InputStrea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安徽合肥長虹美菱生活電器有限公司招聘筆試參考題庫附帶答案詳解
- 2025年湖南邵陽市邵東市城市發(fā)展集團有限公司招聘筆試參考題庫含答案解析
- 2025年內蒙古聚英人力資源服務有限責任公司招聘筆試參考題庫含答案解析
- 2025中山市坦洲鎮(zhèn)社區(qū)工作者考試真題
- 2025伊春市烏翠區(qū)安全經營所社區(qū)工作者考試真題
- 2025唐山市灤南縣長凝鎮(zhèn)社區(qū)工作者考試真題
- 2025臺州市椒江區(qū)葭沚街道社區(qū)工作者考試真題
- 顱腦損傷急性期康復護理
- 披薩簡筆畫教學課件
- 防雪防滑防凍安全教育
- 情緒心理學與情緒管理 課件
- 《民俗旅游學》教案-第九章 歲時節(jié)日民俗與旅游
- 軟件質量證明書
- 高考標準化考場建設方案詳細
- 人民醫(yī)院腫瘤科臨床技術操作規(guī)范2023版
- 高壓-引風機電機檢修文件包
- GB/T 39486-2020化學試劑電感耦合等離子體質譜分析方法通則
- GB/T 11085-1989散裝液態(tài)石油產品損耗
- GXH-3011A1便攜式紅外線CO分析儀
- 2022年四川省阿壩州中考數(shù)學試卷及解析
評論
0/150
提交評論