Struts2的文件下载需要将contentType、inputStream、contentDisposition三个参数设定好即可,具体代码如下
Action代码:
package com.maty.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import cn.itcast.utils.FileUtils;
public class FileDownloadAction extends ActionSupport
{
//文件下载主要需要靠stream这个结果集类型来完成
private String contentType; //文件的mime类型,默认为text/plain;
private InputStream inputStream; //inputstream流的名称
private String contentDisposition;
//第一步:获取需要下载的文件路径
String path = "d://";
String filename = "你好.txt";
//获取文件类型
@Override
public String execute() throws Exception
{
//1.设定下载文件的路径
String path="d://";
String filename = "你好.txt";
//2.获取文件类型
contentType = ServletActionContext.getServletContext().getMimeType(filename);
//3.获取inputstream
inputStream = new FileInputStream(new File(path+filename));
//如果filename为中文名称,则需要将中文文件名转码
filename = FileUtils.encodeDownloadFilename(filename, ServletActionContext.getRequest().getHeader("user-agent"));
//4.设定contentDisposition参数
contentDisposition = "attachment;filename="+filename;
//将这三个参数放入到action的值栈中
ActionContext.getContext().put("contentType", contentType);
ActionContext.getContext().put("inputStream", inputStream);
ActionContext.getContext().put("contentDisposition", contentDisposition);
return SUCCESS;
}
}