Servlet 输出文件下载

1、如果下载的文件名是中文:
     将文件名重新用“ISO8859_1”编码

2、下载自定义文件名:
     Response 设置头文件类型 “Content-disposition”,值为“ attachment;filename="文件名" ”

3、获取文件的MIME类型
     通过 ServletContext 的 getMimeType(String filename),即通过文件的后缀名得到注册在tomcat中的相应MIME类型


4、实例(要下载的文件在WebRoot/file/模版文件.xls):

@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		String referPath = req.getHeader("Refer");
		String fileName = req.getSession()
								.getServletContext()
								.getRealPath("/")+"file/temp.xls";
		File file = new File(fileName);
		if (file == null || !file.exists() ) {
			System.out.println("文件不存在 : "+fileName);
			resp.sendRedirect(referPath);
		}
		
		resp.setCharacterEncoding("UTF-8");
		
		String fileType = req.getSession()
								.getServletContext()
								.getMimeType(fileName);
		if (fileType==null) {
			fileType = "application/octet-stream";
		}
		resp.setContentType(fileType);
		System.out.println("文件类型是:"+fileType);
		String newFileName = new String("模版文件.xls".getBytes(), "ISO8859_1");
		resp.setHeader("Content-disposition", "attachment;filename=\""+newFileName+"\"");
		
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
		BufferedOutputStream bos = new BufferedOutputStream(resp.getOutputStream());
		
		byte[] buffer = new byte[1024];
		int length = 0;
		
		while((length = bis.read(buffer)) != -1){
			bos.write(buffer, 0, length);
		}
		
		if (bis != null) bis.close();
		if (bos != null) bos.close();
	}

转载于:https://my.oschina.net/evilgod528/blog/117594

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值