java 文件下载

文件下载:
下载方式:
1.超链接下载
<a href="/day10/download/day10.txt">下载 day10.txt</a>
若浏览器能解析该资源的mime类型,则打开;若不能接下则下载;
2.编码下载 通过servlet完成
<a href="/day10/download?name=day10.txt">下载 day10.txt</a>
a.设置文件的mime类型
String mimeType=context.getMimeType(文件名)
response.setContentType(mimeType);

b.设置下载头信息 content-disposition
response.setHeader("content-disposition", "attachment;filename="+文件名称);

c.提供流
response.getOutputStream();

扩展:使用commons-io工具类
对拷流:

IOUtils.copy(is,os);



代码参考:

/**
 * 文件下载
 */
public class DownloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取下载文件的名称
		String filename = request.getParameter("name");
		
		//注意中文乱码:
		filename=new String(filename.getBytes("iso8859-1"),"utf-8");
		
		ServletContext context = this.getServletContext();
		//文件下载
		//1.设置文件的mimeType
		String mimeType = context.getMimeType(filename);
		response.setContentType(mimeType);
		
		//2.设置下载的头信息
		//response.setHeader("content-disposition", "attchment;filename="+filename);
		
		//常见的浏览器将文件名称使用utf-8 不推荐 不兼容火狐
		//response.setHeader("content-disposition", "attchment;filename="+URLEncoder.encode(filename, "utf-8"));
		
		//方式1:通过的方式 通过工具类编码
		//String _filename=DownLoadUtils.getName(request.getHeader("user-agent"), filename);
		//response.setHeader("content-disposition", "attachment;filename="+_filename);
		
		//方式2:网络上的方式 (8成好使)
		response.setHeader("content-disposition", "attachment;filename="+new String(filename.getBytes("gbk"),"iso8859-1"));
		//3.对拷流
		//获取输入流
		InputStream is = context.getResourceAsStream("/download/"+filename);
		
		//获取输出流
		ServletOutputStream os = response.getOutputStream();
		
		/*int len=-1;
		byte[] b=new byte[1024];
		
		while((len=is.read(b))!=-1){
			os.write(b, 0, len);
		}*/
		
		IOUtils.copy(is, os); 
		
		os.close();
		is.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值