上一篇学习了文件的上传(点击链接进入:控制单个与多个文件的上传),今天花了点时间学习了一下文件的下载.
(一):首先要学习Stream类,因为Struts2提供了stream的结果类型(可以在struts.xml的result的type属性进行配置),这个结果类型就是专门用来支持文件下载功能的,指定这个stream的时候,同时附带需要在param中指定一些参数:
例如:inputStream这个参数,这个是指定了一个输入流,这就是文件下载的一个入口.
让我们一起来看下Stream这个类:
当我们配置了stream的时候,需要指定一些参数(但只要指定一些必须的例如:inputName,contentDisposition)
- contentType:指定这个输入流的类型
- contentLength:指定输入流的长度
- contentDisposition :指定下载的文件名字,其中下载的时候,默认为inline,此时浏览器判断时候可以直接打开, 如果不可以,会用下载器去下载下来.attachment;filename="xxxx.xx".
- inputName:指定被下载文件的入口的输入流
- bufferSieze:下载的时候的缓冲区的大小
- allowCaching:是否允许支持缓存
- contentCharSet:下载的文件的内容的编码格式
上面的那些参数的的意思,是我自己看文档的一个小理解吧,可能理解的不太准确(初学这些东西),看到了错误希望大家提出来,我再去好好修改一下。
看下文档中给出的对于上述参数的配置的例子:

(二)下面直接看个文件下载的小例子
①:处理文件下载的Action类:
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;
}
}
②:struts.xml的配置文件:
<?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>
③:另外的显示下载文件信息的jsp文件就不贴了,具体可以去点击下面的代码的下载链接
以上就是关于文件下载的一个简要介绍了,继续对此的深入学习.
学习笔记有些地方如果总结的不合理有错误,希望大家能够给我留言提出来,我会尽快改过来的.谢谢.
有兴趣大家一起交流哦