網頁

2017/9/7

Struts 2 下載檔案

在Struts 2檔案下載(file download)的設定如下。

Struts 2配置檔struts.xml<action>設定

<action name="download" class="com.matt.action.DownloadAction" method="download">
  <result name="success" type="stream">
    <param name="contentType">application/octet-stream</param>
    <param name="inputName">inputStream</param>
    <param name="contentDisposition">attachment;filename="sample.txt"</param>
    <param name="bufferSize">1024</param>
  </result>
</action>

contentType要設為application/octet-stream。預設為text/plain
inputName與Action類中用來輸出檔案的成員變數名稱相同。預設為inputStream
contentDisposition決定輸出檔案的名稱。
bufferSize為輸出的緩衝大小。

Action類的設定,讀取檔案並放入成員變數inputStream,Struts 2會透過inputStream來輸出檔案。

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport{

  private InputStream inputStream;
 
  public String download() throws Exception {
      String filePath = "C:\\sample.txt"; // 檔案位置
      inputStream = new FileInputStream(new File(filePath));
      return SUCCESS;
  }
  
  // 別忘了inputStream的getter和setter
  public InputStream getInputStream() {
    return inputStream;
  }

  public void setInputStream(InputStream inputStream) {
    this.inputStream = inputStream;
  }
}

JSP的下載連結

<input type="button" value="下載檔案" onclick="window.location='<s:url action="download.action"/>' "/> 
<a href="<s:url action="download.action" ">下載</a>

當點了JSP的下載連結,會去struts.xml尋找<action name="download">,然後根據設定的method去呼叫對應的DownloadAction.download()。因為result typestream<result name="success" type="stream">),所以Action執行結束後會返回inputStream然後開始下載檔案。

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


參考:

沒有留言:

張貼留言