Struts2 檔案的下載
阿新 • • 發佈:2018-12-20
Struts2使用type="stream"的result就可以了
contentType:結果型別
contentLength:下載的檔案的長度
contentDisposition:設定的響應頭,檔案的下載型別
inputName:指定檔案輸入流的getter定義的屬性的名字,預設inputstream
前4個是可以動態獲取的,後面是靜態的
bufferSize:快取的大小1024
allowCaching:是否允許的使用快取
contentCharSet:指定下載的字符集
以上採納數可以在Action中以getter方法的方式獲取
Demo如下
jsp頁面
<a href="upload.do">點選下載原始檔</a>
Struts2.xml檔案配置如下
<action name="upload" class="cn.com.app.Upload" method="execute"> <result type="stream" name="success"> <param name="bufferSize">2048</param> </result> <result name="input">/index.jsp</result> </action>
Action類如下
package cn.com.app; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class Upload extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private String contentType; private long contentLength; private String contentDisposition; private InputStream InputStream; public String getContentType() { return contentType; } public long getContentLength() { return contentLength; } public String getContentDisposition() { return contentDisposition; } public InputStream getInputStream() { return InputStream; } @Override public String execute() { // TODO Auto-generated method stub // 確認各個成員物件的值 contentType = "text/html"; contentDisposition = "attachment;filename=a.html"; // 獲取檔案的路徑 ServletContext sv = ServletActionContext.getServletContext(); String fileName = sv.getRealPath("/files/a.html"); // 讀取檔案 try { InputStream = new FileInputStream(fileName); System.out.println("路徑:" + InputStream); // 檔案的長度 contentLength = InputStream.available(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return SUCCESS; } }
前提是WebRoot下面有檔案,檔案是存在的
成功效果如下