- DownloadAction.java
/**
*
*/
package com.igeek.download;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.igeek.utils.FileUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author Administrator
*
*/
public class DownloadAction extends ActionSupport {
@Override
public String execute() throws Exception {
//指定下载路径:
String path = "d://";
String fileName = "你好.txt";
//获取两头一流
String contentType = ServletActionContext.getServletContext().getMimeType(fileName);
//获取输入流
InputStream inputStream = new FileInputStream(new File(path + fileName));
//content-disposition
//处理文件名的中文乱码问题
String agent = ServletActionContext.getRequest().getHeader("user-agent");
fileName = FileUtils.encodeDownloadFileName(fileName,agent);
String contentDisposition = "attachment;filename=" + fileName;
//将上面的三个信息放入值栈(容器)
ActionContext.getContext().put("contentType", contentType);
ActionContext.getContext().put("inputStream", inputStream);
ActionContext.getContext().put("contentDisposition", contentDisposition);
return SUCCESS;
}
}
FileUtils.java
/**
*
*/
package com.igeek.utils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import sun.misc.BASE64Encoder;
/**
* @author Administrator
*处理中文乱码问题
*/
public class FileUtils {
/***
* 下载文件时,针对不同的浏览器,进行附件名的编码
* @param filename 下载的文件名
* @param agent 客户端浏览器
* @return 编码后的附件名
* @throws IOException
*/
public static String encodeDownloadFileName(String filename,String agent) throws IOException
{
if(agent.contains("Firefox")) //火狐浏览器
{
filename = "?UTF-8?B?"
+ new BASE64Encoder().encode(filename.getBytes("utf-8"))
+ "?=";
filename = filename.replaceAll("\r\n", "");
}
else //IE 及其它浏览器
{
filename = URLEncoder.encode(filename,"utf-8");
filename = filename.replace("+", " ");
}
return filename;
}
}
strtus.xml
<package name="default" extends="struts-default" namespace="/">
<action name="download" class="com.igeek.download.DownloadAction">
<!-- 使用strtus2提供的下载功能,需要配置结果集 -->
<result type="stream"></result>
</action>
</package>
访问路径
http://localhost:8080/工程名/download.action
就可以下载我们指定路径中 你好.txt 中的文件啦!