zoukankan      html  css  js  c++  java
  • 使用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=""。

  • 相关阅读:
    animation-fill-mode
    css3 media queries
    三列,左右两列宽度固定,中间宽度自适应
    两列布局,一列定宽,一列宽度自适应
    css3 animation
    transition和animation区别
    transform 和 transition
    弹出框样式
    python map和filter函数
    leetcode Z字形字符串
  • 原文地址:https://www.cnblogs.com/empcl1314/p/6947719.html
Copyright © 2011-2022 走看看