Struts2 文件下载

2019-12-27 16:05:16来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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中的配置,向浏览器返回一个输入流,并告知浏览器将此输入流的数据保存为指定文件。

原文链接:https://www.cnblogs.com/chy18883701161/p/12109531.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:5种JVM调优配置方法概览

下一篇:Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间AP