Struts2提供了stream结果类型,是专门用于支持文件下载功能的。
实现文件下载的action类
这个类与普通action实现类的唯一区别就是,这个action类需要提供一个返回InputStream的方法。该方法是被下载文件的入口。代码如下。如果想要实现控制下载等一系列其他的功能,只需要在execute方法中实现即可。
public class download extends ActionSupport { private String inputPath; public String getInputPath() { return inputPath; } public void setInputPath(String inputPath) { this.inputPath = inputPath; } public InputStream getTargetFile() throws Exception { return ServletActionContext.getServletContext().getResourceAsStream( inputPath); } @Override public String execute() throws Exception { return SUCCESS; } }
----------------------------------------------------------------------------------------------------------------
下面来看在xml中的配置代码。
<action name="download" class="com.cm.actions.download"> <param name="inputPath">/WEB-INF/aa.txt</param> <result name="success" type="stream"> <param name="contentType">text/plain</param> <param name="inputName">targetFile</param> <param name="contentDisposition">attachment;filename="aa.txt"</param> <param name="bufferSize">4096</param> </result> </action>
这里的action就是处理下载按钮的action。inputPath就是文件所在的路径,而返回的结果不再是视图,而是一个流。里面能够规定contentType。inputName则是aciton方法中的返回inputStream的方法的名字。在contentDisposition参数中,如果写了attachment,则是以下载的形式呈现,如果不写,则只是在页面中呈现出来。filename是 下载的时候显示的文件名,可以自定义。
时间: 2024-11-05 02:37:22