• 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中的配置,向浏览器返回一个输入流,并告知浏览器将此输入流的数据保存为指定文件。
  • 相关阅读:
    Android smali 语法
    iOS 发布计费点测试
    how-to-stop-non-jailbroken-pirates-theory
    shell script
    文章收藏
    NB BAT批量读取图片文件属性
    JAVA LUHN
    MAC NDK 编译 Cocos2dx 问题
    Mac 下解压缩安装Android ndk bin 文件
    MVC Json输出调试信息
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12109531.html
Copyright © 2020-2023  润新知