文件下载

本文介绍如何实现文件下载功能,并重点讲解了在不同浏览器环境下解决文件名中文乱码问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.下载也就是向客户端响应字节数据。要把一个文件变成字节数组,可以通过Response.getOutputStream()给浏览器。

2.下载要点:两个头,一个流!

          >contentType:定义传递给客户端的是什么MIME类型。例如:image/jpeg、text/html 等等

                       >>contentType获取方式:通过ServletContext类中的getMimeType(String filename)得到contentType类型。

          >Content-Disposition:它的默认值是inline。表示直接在浏览器中打开!若定义为:attachment;filename=xxx。则表示以附件的形式下载,filename后面跟下载时显示的文件名。

          >流:要下载的文件数据。

3.下载框中出现中文乱码问题

        >FireFox浏览器:采用的是Base64编码方式。

        >其它大部分浏览器:采用的是URL编码方式。

        >两种处理方案:

                >>最直接、通用的方法:对下载框中出现的文件名先进行如下处理  filename = new String(filename.getBytes("UTF-8"),"ISO8859-1");

                >>一劳永逸方案:

 private String filenameEncoding(String filename, HttpServletRequest request) throws UnsupportedEncodingException {
  String agent = request.getHeader("User-Agent");//获取浏览器信息
  if(agent.contains("FireFox")) {//火狐浏览器
   BASE64Encoder base64Encoder = new BASE64Encoder();
   filename = "=?utf-8?B?"
     +base64Encoder.encode(filename.getBytes("utf-8"))
     +"?=";
  } else if(agent.contains("MSIE")) {//IE浏览器
   filename = URLEncoder.encode(filename,"utf-8");
  } else {
   filename = URLEncoder.encode(filename, "utf-8");
  }
  return filename;
 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值