首页 > 代码库 > struts文件下载机制

struts文件下载机制

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文件下载机制