Struts 2 使用 type="stream" 實現文件下載,關鍵參數:
text/plain、application/octet-stream。InputStream 屬性名稱(需提供 getInputStream())。attachment;filename="xxx" 彈出存檔對話框;inline 瀏覽器嘗試直接顯示。
<action name="download" class="example.FileDownloadAction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="struts2.txt"</param>
<param name="bufferSize">4096</param>
</result>
</action>
Action 額外提供 getDownloadFileName() 回傳 URL 編碼後檔名:
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
Action 依 inputPath 讀取檔案建立 InputStream,同樣搭配動態檔名:
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
getInputStream() 回傳資料流(字串轉換、檔案讀取等)。URLEncoder.encode(fileName, "UTF-8"),並替換 + 為 %20。FileInputStream 避免記憶體壓力。
<package name="default" extends="struts-default">
<!-- 三個 action 定義見上 -->
</package>