首页 > 其他 > 详细

Struts2 文件下载

时间:2019-12-27 21:16:27      阅读:89      评论:0      收藏:0      [点我收藏+]

 

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

Struts2 文件下载

原文:https://www.cnblogs.com/chy18883701161/p/12109531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!