分享

SpringBoot 文件下载及文件名中文乱码问题

 wwq图书世界 2019-10-09
  • /**
  • * 下载--测试
  • */
  • @GetMapping("download")
  • public void download(HttpServletResponse response) throws SysInnerException {
  • String outFileName = "下载文件名称(中文).txt";
  • String filePath = "D:\\000\\";
  • Path file = Paths.get(filePath, "原文件data-utf8 - 副本.txt");
  • if (Files.exists(file)) {
  • // 设置Headers
  • // response.setContentType("application/force-download");
  • response.setHeader("Content-Type", "application/octet-stream;charset=utf-8"); // 告诉浏览器输出内容为流
  • // Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。
  • // 该方式下载的文件名 中文乱码问题
  • // response.setHeader("Content-Disposition", "attachment;filename=" + outFileName);
  • try {
  • // 方法1: 设置下载的文件的名称-该方式已解决中文乱码问题,swagger,postman看到的是%...等,浏览器直接输url,OK
  • response.setHeader("Content-Disposition",
  • "attachment;filename=" + URLEncoder.encode(outFileName, ENCODING));
  • // 方法2: 设置下载的文件的名称-该方式已解决中文乱码问题,swagger,postman看到的是%...等,浏览器直接输url,OK(
  • // 把文件名按UTF-8取出并按ISO8859-1编码,保证弹出窗口中的文件名中文不乱码,中文不要太多,最多支持17个中文,因为header有150个字节限制。)
  • response.setHeader("Content-Disposition",
  • "attachment;filename=" + new String(outFileName.getBytes(ENCODING), "ISO8859-1"));
  • // 方法3:设置下载的文件的名称-该方式已解决中文乱码问题,postman可以,,swagger看到的是%...等,浏览器直接输url,OK
  • response.setHeader("Content-Disposition", "attachment;filename=" + outFileName + ";filename*=utf-8''"
  • + URLEncoder.encode(outFileName, ENCODING));
  • } catch (UnsupportedEncodingException e) {
  • message = "导入数据失败," + e.getMessage();
  • log.error(message);
  • throw new SysInnerException(message);
  • }
  • try {
  • Files.copy(file, response.getOutputStream());
  • } catch (IOException ex) {
  • message = "导入数据失败," + ex.getMessage();
  • log.error(message);
  • throw new SysInnerException(message);
  • }
  • }
  • }
  • }
    • 本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多