inputStream的理解" type="hidden"/>

struts2文件下載及 inputStream的理解


轉自:http://blog.csdn.net/wnczwl369/article/details/7483290

轉自:http://hi.baidu.com/c2_sun/item/934a542518c6ecc5a5275aad

 

struts.xml文件配置:

 1 <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 
 6 <struts>
 7     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
 8     <constant name="struts.devMode" value="true" />
 9 
10     <package name="app14a" extends="struts-default">
11         <action name="Menu">
12               <result>/jsp/Menu.jsp</result>
13         </action>
14         <action name="ViewCss" class="app14a.FileDownloadAction">
15             <result name="success" type="stream">
16                 <param name="inputName">inputStream</param>
17                 <param name="contentType">text/css</param>
18                 <param name="contentDisposition">filename="main11.css"</param>
19                 <param name="bufferSize">2048</param>
20             </result>
21         </action>
22         <action name="DownloadCss" class="app14a.FileDownloadAction">
23             <result name="success" type="stream">
24                 <param name="inputName">inputStream</param>
25                 <param name="contentType">application/octet-stream</param>
26                 <param name="contentDisposition">filename="main111222.css"</param>
27                 <param name="bufferSize">2048</param>
28             </result>
29         </action>
30     </package>
31 </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 
下載緩沖區的大小
 
 

配置文件詳解:

1、type 為 stream 應用 StreamResult 處理

2、contentType

   內容類型,和互聯網MIME標准中的規定類型一致,例如text/plain代表純文本,text/xml表示XML,image/gif代表GIF圖片,image/jpeg代表JPG圖片

3、inputName

  下載文件的來源流,對應着action類中某個類型為Inputstream的屬性名,例如取值為inputStream的屬性需要編寫getInputStream()方法

4、contentDisposition

  文件下載的處理方式,包括內聯(inline)和附件(attachment)兩種方式,而附件方式會彈出文件保存對話框,否則瀏覽器會嘗試直接顯示文件。取值為:

  attachment;filename="struts2.txt",表示文件下載的時候保存的名字應為struts2.txt。如果直接寫filename="struts2.txt",那么默認情況是代表inline,瀏覽器會嘗試自動打開它,等價於這樣的寫法:inline;filename="struts2.txt"

5、bufferSize

  下載緩沖區的大小

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM