Struts2 文件下载

 

jsp

<body>
  <a href="DownloadAction?fileName=荷花.txt">下载文档</a> <br />
  <a href="DownloadAction?fileName=荷花.jpg">下载图片</a> <br />
</body>

fileName带文件名后缀。

 

 

 

action

public class DownloadAction extends ActionSupport {
    private String fileName;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public InputStream getInputStream(){
        return ServletActionContext.getServletContext().getResourceAsStream("resource/" + fileName);
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}
  • 一个String类型的成员变量表示文件名,并提供对应的getter、setter方法
  • 一个获取输入流的方法,返回该文件的输入流。也可以写成   new FileInputStream()  。
  • 一个要调用的方法

 

 

 

struts.xml

<action name="DownloadAction" class="action.DownloadAction">
            <result name="success" type="stream">
                <!-- 指定action中获取输入流的方法,getInputStream,约定:去掉get,后面部分转化为camel写法 -->
                <param name="inputName">inputStream</param>
                <!-- 设置浏览器对此stream(输入流)的处理方式:保存为文件,filename指定文件名 -->
                <param name="contentDisposition">attachment;filename=${fileName}</param>
                <!-- 设置缓冲大小,默认单位字节 -->
                <param name="bufferSize">4096</param>
                <!-- 解决中文文件名出错 -->
                <param name="encode">true</param>
            </result>
</action>

 

 

 

流程分析

  • 浏览器向服务器发送请求,将fileName传递给action
  • JVM创建action实例,并调用action的setFileName()将浏览器传过来的文件名赋给成员变量fileName,完成成员变量的初始化
  • JVM调用action的execute()来处理浏览器的请求,返回SUCCESS,JVM根据struts.xml中的配置,向浏览器返回一个输入流,并告知浏览器将此输入流的数据保存为指定文件。
posted @ 2019-12-27 20:40  chy_18883701161  阅读(333)  评论(0编辑  收藏  举报