使用servlet完成文件下载

文件下载的关键两步骤

  //要下载的这个文件的类型-----客户端通过文件的MIME类型去区分类型
  response.setContentType(this.getServletContext().getMimeType(filename));
  //告诉客户端该文件不是直接解析 而是以附件形式打开(下载) 
  response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);

如果文件中出现了中文乱码的错误,添加一下代码: (以下代码要添加到上面两行的上面) 

  filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//解决乱码问题 filename=文件名
  String agent = request.getHeader("User-Agent");
  String filenameEncoder = "";
  if (agent.contains("MSIE")) {
  // IE浏览器
  filenameEncoder = URLEncoder.encode(filename, "utf-8");
  filenameEncoder = filenameEncoder.replace("+", " ");
  } else if (agent.contains("Firefox")) {
  // 火狐浏览器
  BASE64Encoder base64Encoder = new BASE64Encoder();
  filenameEncoder = "=?utf-8?B?"
  + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
  } else {
  // 其它浏览器
  filenameEncoder = URLEncoder.encode(filename, "utf-8");
  }

  原因:为什么在设置了new String(filename.getBytes("ISO8859-1"),"UTF-8");之后,下载中文文件为什么文件名为空?

  解答:filename="+filenameEncoder 客户端默认对名字进行解码,不同的客服端解码的方式不同。如果没有上述语句的话,也就是filename还没有进行编码,那怎么能够解码呢,自然而然的,filename=""。

原文地址:https://www.cnblogs.com/empcl1314/p/6947719.html