文件下载,content-disposition 中文乱码

编程知识 更新时间:2023-04-05 06:36:52

下载
1、下载就是向客户端响应字节数据
原来我们响应的都是html字符数据
把一个文件变成字节数据,使用response.getOutputStream()来响应客户端

2、下载的要求
两个头一个流

Content-Type:你传递给客户端的文件是什么MIME类型,例如:image/jpeg
通过文件名称调用servletContext的getMimeType()方法,得到MIME类型
String filePath = “D:\时间都去哪儿了.mp3”;
String contentType = this.getServletContext().getMimeType(filePath);
response.setCharacterEncoding(“UTF-8”);
response.setContentType(contentType);
Content-Disposition:它的默认值是inline,表示在浏览器窗口打开,attachment;filename=xxx,浏览器跳出下载框
在filename=后面跟随的是显示在下载框中的文件名称
String contentDisposition = “attachment;filename=”+URLEncoder.encode(“时间都去哪儿了.mp3”, “UTF-8”);
response.setHeader(“Content-Disposition”, contentDisposition);
流:要下载的文件数据。
自己new一个输入流即可!
FileInputStream is = new FileInputStream(filePath);

    ServletOutputStream os = response.getOutputStream();
    IOUtils.copy(is, os);
    is.close();

源码:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String filePath = "D:\\时间都去哪儿了.mp3";
        String contentType = this.getServletContext().getMimeType(filePath);
        System.out.println(contentType);
        String contentDisposition = "attachment;filename*=UTF-8''"+URLEncoder.encode("时间都去哪儿了.mp3", "UTF-8");
        FileInputStream is = new FileInputStream(filePath);

        response.setCharacterEncoding("UTF-8");
        response.setContentType(contentType);
        //response.setHeader("content-Type", contentType);
        response.setHeader("Content-Disposition", contentDisposition);

        ServletOutputStream os = response.getOutputStream();
        IOUtils.copy(is, os);
        is.close();

    }

3、中文名乱码问题
3.1、使用指定编码,并告诉浏览器编码类型

Content-Disposition : attachment; filename* = UTF-8''%E6%96%87%E4%BB%B6.txt

向下兼容:
Content-Disposition: attachment;
filename=”encoded_text”;
filename*=utf-8”encoded_text

filename*=编码类型”使用编码类型来编码的文件名

String contentDisposition = "attachment;filename=" + URLEncoder.encode("时间都 去哪儿了.mp3", "UTF-8")
                + ";filename*=UTF-8''" + URLEncoder.encode("时间都去哪 儿了.mp3", "UTF-8");
//优先使用filename*=utf-8''encoded_text;没有这个或者这个解码出问题了,使用filename="encoded_text";

更多推荐

文件下载,content-disposition 中文乱码

本文发布于:2023-04-05 06:36:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/96bc6a86ccbc78163b1111f7e24765e1.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:乱码   中文   文件   disposition   content

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 45312文章数
  • 14阅读数
  • 0评论数