上一篇学习了文件的上传(点击链接进入:控制单个与多个文件的上传),今天花了点时间学习了一下文件的下载.
(一):首先要学习Stream类,因为Struts2提供了stream的结果类型(可以在struts.xml的result的type属性进行配置),这个结果类型就是专门用来支持文件下载功能的,指定这个stream的时候,同时附带需要在param中指定一些参数:
例如:inputStream这个参数,这个是指定了一个输入流,这就是文件下载的一个入口.
让我们一起来看下Stream这个类:
当我们配置了stream的时候,需要指定一些参数(但只要指定一些必须的例如:inputName,contentDisposition )
package com.jiangqq.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; //进行文件下载处理的Action类 public class DownLoadAction1 extends ActionSupport { private String filename; public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } //把要进行下载的文件以流的形式返回 //这个方法命名有点规则,可以进行getXXXXX(),但是后面的XXXX会在struts.xml中会用到,稍后会讲到 public InputStream getDownloadFile() { return ServletActionContext.getServletContext().getResourceAsStream( "/upload/TestSyncListView.rar"); } @Override public String execute() throws Exception { return SUCCESS; } }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--设置常量的标签 --> <constant name="struts.multipart.maxSize" value="104857600000000"></constant> <package name="struts2" extends="struts-default"> <action name="fileupLoadAction" class="com.jiangqq.action.FileUpLoadAction"> <result name="success">/fileuploadResult.jsp</result> </action> <action name="downloadFile" class="com.jiangqq.action.DownLoadAction1"> <!-- 指定是流 --> <result name="success" type="stream"> <!-- attachment告诉浏览器,点击下载的时候强行使用下载器进行下载,默认为inline:这是看浏览器能不能打开,不能打开使用下载器 --> <!-- 后面那个filename是进行下载的那个文件显示的名字 --> <param name="contentDisposition">attchament;filename=${filename}</param> <!--在Action中中getDownloadFile返回一个InputStream的输入流,这个输入流是文件下载的入口, 这对应param的name得值为downloadFile --> <param name="inputName">downloadFile</param> </result> </action> </package> </struts>