struts2檔案下載及 inputStream的理解
struts.xml檔案配置:
- <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.enable.DynamicMethodInvocation" value="false" />
- <constant name="struts.devMode" value="true" />
- <package name="app14a" extends="struts-default">
- <action name="Menu">
- <result>/jsp/Menu.jsp</result>
- </action>
- <action name="ViewCss" class="app14a.FileDownloadAction">
- <result name="success" type="stream">
- <param name="inputName">inputStream</param>
- <param name="contentType">text/css</param>
- <param name="contentDisposition">filename="main11.css"</param>
- <param name="bufferSize">2048</param>
- </result>
- </action>
- <action name="DownloadCss" class="app14a.FileDownloadAction">
- <result name="success" type="stream">
- <param name="inputName">inputStream</param>
- <param name="contentType">application/octet-stream</param>
- <param name="contentDisposition">filename="main111222.css"</param>
- <param name="bufferSize">2048</param>
- </result>
- </action>
- </package>
- </struts></span>
action特殊的地方在於result的型別是一個流(stream),配置stream型別的結果時,因為無需指定實際的顯示的物理資源,所以無需指定location屬性,只需要指定inputName屬性,該屬性指向被下載檔案的來源,對應著Action類中的某個屬性,型別為InputStream,,struts2會尋找一個返回型別為InputStream的方法getInputStream()(方法名最好為getInputStream,有人說此方法名可以為別的可能需要與struts.xml中的inputName儲存一致下面有解釋,不過我實驗的結果不是這樣,須為getInputStream,可能是org.apache.struts2.dispatcher.ResultStream類限制造成,感興趣的可以看看此類的原始碼,就會明白的),得到InputStream。
另一種理解:action中定義一個返回InputStream的方法,該方法作為被下載檔案的入口,且需要配置stream型別結果時指定inputName引數,inputName引數的值就是方法去掉get字首、首字母小寫的字串。
下面則列出了和下載有關的一些引數列表:
引數說明
contentType
內容型別,和網際網路MIME標準中的規定型別一致,例如text/plain代表純文字,text/xml表示XML,image/gif代表GIF圖片,image/jpeg代表JPG圖片
inputName
下載檔案的來源流,對應著action類中某個型別為Inputstream的屬性名,例如取值為inputStream的屬性需要編寫getInputStream()方法
contentDisposition
檔案下載的處理方式,包括內聯(inline)和附件(attachment)兩種方式,而附件方式會彈出檔案儲存對話方塊,否則瀏覽器會嘗試直接顯示檔案。取值為:
attachment;filename="struts2.txt",表示檔案下載的時候儲存的名字應為struts2.txt。如果直接寫filename="struts2.txt",那麼預設情況是代表inline,瀏覽器會嘗試自動開啟它,等價於這樣的寫法:inline; filename="struts2.txt"
bufferSize
下載緩衝區的大小
相關文章
- Struts2的檔案上傳下載
- sra檔案下載及解析的問題
- struts2上傳多個檔案,下載 配製!程式碼
- JAVA Web 之 struts2檔案上傳下載演示(一)(轉)JavaWeb
- struts2 檔案上傳和下載,以及部分原始碼解析原始碼
- Netty接收HTTP檔案上傳及檔案下載NettyHTTP
- 從檔案下載視角來理解Web APIWebAPI
- PHP下載遠端檔案及獲取檔案內容PHP
- 【SSH2(實踐篇)】--Struts2檔案上傳下載例項
- 檔案下載
- 任意檔案讀取與下載的原理及修復
- Java實現上傳檔案到Oracle及從Oracle下載檔案JavaOracle
- 下載檔案的ContentType
- 00、下載檔案
- Ajax 下載檔案
- FastApi下載檔案ASTAPI
- MVC 下載檔案MVC
- js 檔案下載JS
- Servlet下載檔案Servlet
- httpWebRequest 檔案下載HTTPWeb
- php檔案下載PHP
- .net 檔案下載
- php 檔案下載PHP
- HttpClient 下載檔案HTTPclient
- Response下載檔案
- 大檔案下載及影片點播的CDN加速實踐
- Linux下掛載及解除安裝ISO檔案Linux
- MinIO上傳和下載檔案及檔案完整性校驗.
- 檔案程式設計、檔案下載程式設計
- iOS開發網路篇之檔案下載、大檔案下載、斷點下載iOS斷點
- Linux下的檔案及檔案字尾名Linux
- 下載檔案的15種方法
- 15種下載檔案的方法
- 檔案的上傳與下載
- Weex 實現檔案的下載
- Struts2 配置檔案(八)
- Zend Framework中header下載檔案的問題及解決FrameworkHeader
- ASP.NET 大檔案下載的實現思路及程式碼ASP.NET