1. 程式人生 > >struts2檔案下載

struts2檔案下載

<!--struts.xml配置-->

<action name="download" class="com.unmi.action.DownloadAction">        
     <result name="success" type="stream"><!--type 為 stream 應用 StreamResult 處理-->        
         <param name="contentType">application/octet-stream</param><!--預設為 text/plain-->        
                 
         <!-- 預設就是 inputStream,它將會指示 StreamResult 通過 inputName 屬性值的 getter 方法,        
               比如這裡就是 getInputStream() 來獲取下載檔案的內容,意味著你的 Action 要有這個方法 -->        
         <param name="inputName">inputStream</param>        
                 
         <!-- 預設為 inline(線上開啟),設定為 attachment 將會告訴瀏覽器下載該檔案,filename 指定下載文        
               件保有存時的檔名,若未指定將會是以瀏覽的頁面名作為檔名,如以 download.action 作為檔名,        
               這裡使用的是動態檔名,${fileName}, 它將通過 Action 的 getFileName() 獲得檔名 -->        
         <param name="contentDisposition">attachment;filename="${fileName}"</param>        
         <param name="bufferSize">4096</param><!-- 輸出時緩衝區的大小 -->        
     </result>        
</action>

Java程式碼:

public class NetbookSerialAction {        
         
     public String execute() throws Exception {        
         //這裡可加入許可權控制        
         return "success";        
     }        
         
     //獲得下載檔案的內容,可以直接讀入一個物理檔案或從資料庫中獲取內容        
     public InputStream getInputStream() throws Exception {        
         //return new FileInputStream("somefile.rar"); 直接下載 somefile.rar        
         
         //和 Servlet 中不一樣,這裡我們不需對輸出的中文轉碼為 ISO8859-1        
         return new ByteArrayInputStream("Struts2 檔案下載測試".getBytes());        
     }        
         
     //對於配置中的 ${fileName}, 獲得下載儲存時的檔名        
     public String getFileName() {        
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");        
         String fileName = "序列號(" + df.format(new Date()) + ").txt";        
         try {