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 {