struts2文件下載及 inputStream的理解

struts.xml文件配置:css

 

[html]   view plain copy
  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。html

    另外一種理解:action中定義一個返回InputStream的方法,該方法做爲被下載文件的入口,且須要配置stream類型結果時指定inputName參數,inputName參數的值就是方法去掉get前綴、首字母小寫的字符串。web

 

下面則列出了和下載有關的一些參數列表: apache

參數 說明 
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 
下載緩衝區的大小
相關文章
相關標籤/搜索