java Servlet api 文件下载

1 篇文章 0 订阅
1 篇文章 0 订阅
  1. 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 中的文件啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值