欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts2 文件下载

程序员文章站 2022-06-07 11:31:27
jsp 下载文档
下载图片
fileName带文件名后缀。 a ......

 

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