Struts2 文件下载
程序员文章站
2022-06-07 11:31:27
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中的配置,向浏览器返回一个输入流,并告知浏览器将此输入流的数据保存为指定文件。