1. 程式人生 > >struts文件下載機制

struts文件下載機制

ext static xml文件 charset isp .html ide bsp nbsp

Struts2 中使用 type="stream" 的 result 進行下載即可。只用提供一個輸入流inputStream,剩下的輸出工作struts幫我們做。

1.可以為 stream 的 result 設定如下參數

contentType: 結果類型
contentLength: 下載的文件的長度
contentDisposition: 設定 Content-Dispositoin 響應頭. 該響應頭指定響應是一個文件下載類型, 一般取值為 attachment;filename="document.pdf".
inputName: 指定文件輸入流的 getter 定義的那個屬性的名字. 默認為 inputStream

這四個一般在getter方法中定義或者在execute方法執行時設置。

bufferSize: 緩存的大小. 默認為 1024
allowCaching: 是否允許使用緩存
contentCharSet: 指定下載的字符集

這三個參數一般使用默認值或者在xml文件中配置。


以上參數可以在 Action 中以 getter 方法的方式提供,也可以通過配置配置,也可以使用默認值。也可以動態設置值,在execute方法中設置。

 1 package FileDownload;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.InputStream;
5 6 import javax.servlet.ServletContext; 7 8 import org.apache.struts2.ServletActionContext; 9 10 import com.opensymphony.xwork2.ActionSupport; 11 12 public class FileDownLoad extends ActionSupport { 13 14 /** 15 * 16 */ 17 private static final long serialVersionUID = 1L; 18
19 private String contentType; 20 private long contentLength; 21 private String contentDisposition; 22 private InputStream inputStream; 23 24 25 public String getContentType() { 26 return contentType; 27 } 28 29 30 public long getContentLength() { 31 return contentLength; 32 } 33 34 35 // 在getter方法中設置所需要的參數 36 public String getContentDisposition() { 37 contentDisposition = "attachment;filename=filesUp.html"; 38 return contentDisposition; 39 } 40 41 42 public InputStream getInputStream() { 43 return inputStream; 44 } 45 46 47 @Override 48 public String execute() throws Exception { 49 50 //確定各個成員變量的值 51 contentType = "text/html"; 52 53 ServletContext servletContext = 54 ServletActionContext.getServletContext(); 55 String fileName = servletContext.getRealPath("/files/filesUp.html"); 56 // 打開輸入流 57 inputStream = new FileInputStream(fileName); 58 contentLength = inputStream.available(); 59 60 61 return super.execute(); 62 } 63 }

上面可以在execute方法執行時動態設置參數,也可以在getter方法中設置參數。

配置文件

 <!-- 文件下載 -->
        <action name="fileDownload" class="FileDownload.FileDownLoad">
            <result type="stream">
                <!-- 其他的參數在類中設置或者使用默認 -->
                <param name="bufferSize">2048</param>
            </result>
        </action>

struts文件下載機制