先说下stream结果类型:它是用于实现文件下载的功能,需要指定一个输入流,即inputStream参数,通过这个流我们就可以读取要下载的文件内容。实现文件下载也并非如此简单,我们还需要对相关的参数进行配置,如MIME类型,HTTP请求头信息,缓冲区的大小等。
stream结果类型的配置参数
名称 | 作用 |
---|---|
contenType | 设置发送到游览器的MIME类型 |
contenLength | 设置文件的大小 |
contenDispoition | 设置响应的HTTP头信息中的Content-Disposition参数值 |
inputName | 指定Action中提供的inputStream类型的属性名称 |
bufferSize | 设置读取和下载文件时的缓冲区大小 |
FileDownAction
package cn.wgb.action;
import com.opensymphony.xwork2.ActionSupport;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class FileDownAction extends ActionSupport {
//读取下载文件的目录
private String inputPath;
//下载文件的文件名
private String fileName;
//读取下载文件的输入流
private InputStream inputStream;
//下载的文件类型
private String conetnType;
public InputStream getInputStream() throws FileNotFoundException {
String path = "D:\\Hibernate\\strutsUpload\\src\\main\\webapp\\"+(inputPath);
return new BufferedInputStream(new FileInputStream(path+"\\"+fileName));
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
public String getInputPath() {
return inputPath;
}
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public String getConetnType() {
return conetnType;
}
public void setConetnType(String conetnType) {
this.conetnType = conetnType;
}
}
配置Stream结果类型在struts.xml文件中配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!--创建一个default包,继承自Struts2的struts-default包-->
<package name="default" namespace="/" extends="struts-default">
<action name="download" class="cn.wgb.action.FileDownAction">
<param name="inputPath">upload</param>
<result name="success" type="stream">
<param name="conetnType">image/gif</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">
attachment;filename="${fileName}"
</param>
<param name="bufferSize">4096</param>
</result>
</action>
</package>
</struts>
contenType对应的文件类型
文件类型 | contenType设置 |
---|---|
Word | application/msword |
Excel | application/vnd.ms-excel |
PPT | application/vnd.ms-powepoint |
图片 | image/gif,image/bmp,image/jpeg |
文本文件 | text/plain |
HTML网页 | text/html |
任意的二进制数据 | application/octet-stream |
通常情况下,将参数直接设置为application/octet-stream即可。
contentDispoition参数由两个部分组成,前面的部分表示处理文件的形式,如attachment表示在下载时弹出对话框,提示用户保存或者直接打开该文件,后一部分表示下载文件的文件名称,两部分间以;进行分隔。
最后来看简单下载的jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件下载</title>
</head>
<body>
<a href="download.action?fileName=shuoshuo.PNG">点此处下载</a>
</body>
</html>
这样就可以下载文件了