在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 type為stream(<result name="success" type="stream">
),所以Action執行結束後會返回inputStream然後開始下載檔案。
如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。
參考:
沒有留言:
張貼留言