springmvc中下载中文文件名称为下划线的解决方案

作者:我想要的都有啊 时间:2023-11-25 22:28:53 

springmvc下载中文文件名称为下划线

springboot项目中,在下载文件的时候,通过封装ResponseEntity,将文件流写入body,这种下载文件的方式,造成了下载的文件名为正文显示为下划线的形式;

这个问题很好解决

直接将输入的文件名的编码格式定义成GBK格式;

如下代码

public static ResponseEntity<FileSystemResource> export(File file) throws UnsupportedEncodingException {
       if (file == null) {
           return null;
       }
       //这个位置对文件名进行编码
       String fileName = new String (file.getName().getBytes("GBK"),"ISO-8859-1");
       HttpHeaders headers = new HttpHeaders();
       headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
       headers.add("Content-Disposition", "attachment; filename=" +fileName);
       headers.add("Pragma", "no-cache");
       headers.add("Expires", "0");
       headers.add("Last-Modified", new Date().toString());
       headers.add("ETag", String.valueOf(System.currentTimeMillis()));
       return ResponseEntity
               .ok()
               .headers(headers)
               .contentLength(file.length())
               .contentType(MediaType.parseMediaType("application/octet-stream"))
               .body(new FileSystemResource(file));
   }

java生成文件名时汉字变为下划线?

public static void exportToExcel(String uid, String name, String htmlText, 
HttpServletRequest request, HttpServletResponse response) {
      htmlText = htmlText.replaceFirst("<table>", "<tableFirst>");
      htmlText = htmlText.replaceAll("<table>",
            "<table cellpadding=\"3\" cellspacing=\"0\"  border=\"1\" rull=\"all\" 
style=\"border-collapse: collapse\">");
      htmlText = htmlText.replaceFirst("<tableFirst>", "<table>");
      try (OutputStream out = response.getOutputStream()) {
         String fileName = name+ "_" + DateUtils.getNow("yyyyMMddHHmmss");
//       fileName = new String(fileName.getBytes(),"utf-8")+ ".xls";
         if ("large".equals(htmlText)) {
            ReportingPo report = reportingService.getByUid(uid);
            Map<String, Object> formParameters = generationService.getFormParameters(request.getParameterMap(), 
report.getDataRange());
            ReportTable reportTable = generationService.getReportTable(report, formParameters);
            htmlText = reportTable.getHtmlText();
         }
//       response.reset();
         response.addHeader("Content-Disposition", "attachment;filename=" +
 new String(fileName.getBytes("utf-8"),"iso-8859-1")+ ".xls");
//       response.setHeader("Content-Disposition", String.format("attachment; filename=%s", fileName));
         response.setContentType("application/vnd.ms-excel; charset=utf-8");
         response.setCharacterEncoding("utf-8");
         response.addCookie(new Cookie("fileDownload", "true"));
//       out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); // 生成带bom的utf8文件
         out.write(htmlText.getBytes("utf-8"));
         out.flush();
      } catch (Exception ex) {
         throw new RuntimeException(ex);
      }
   }

注意这里两个编码

new String(fileName.getBytes("utf-8"),"iso-8859-1")+ ".xls"

来源:https://blog.csdn.net/weixin_48490821/article/details/116603040

标签:springmvc,下载,中文文件名,下划线
0
投稿

猜你喜欢

  • easyexcel读取excel合并单元格数据的操作代码

    2022-08-26 16:26:21
  • Java 批量删除Word中的空白段落示例代码

    2023-09-17 16:36:53
  • android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载

    2022-07-15 08:39:50
  • Android 全屏无标题栏的三种实现方法

    2022-01-05 03:01:31
  • java实现点击按钮弹出新窗体功能

    2022-02-18 14:39:55
  • C#使用Json.Net对JSON与对象的序列化与反序列化

    2023-04-08 07:22:25
  • MyBatis3用log4j在控制台输出SQL的方法示例

    2023-07-01 07:32:36
  • Java中clone方法使用笔记

    2023-03-26 07:44:38
  • C#使用System.Net邮件发送功能踩过的坑

    2022-09-09 18:16:11
  • 浅析Java中的GC垃圾回收器的意义及与GC的交互

    2022-11-10 13:07:05
  • springboot+nginx+https+linux实现负载均衡加域名访问简单测试

    2022-04-26 22:35:13
  • java从输入流中获取数据并返回字节数组示例

    2021-12-08 22:47:36
  • 关于Intellij IDEA中的Version Control问题

    2021-12-27 08:42:01
  • SpringCloud基本Rest微服务工程搭建过程

    2023-08-28 16:23:29
  • 详解Spring Boot Security工作流程

    2023-12-17 12:23:52
  • Java线程池并发执行多个任务方式

    2023-08-14 16:26:03
  • Hutool开发利器MapProxy类使用技巧详解

    2021-11-10 00:01:35
  • C#实现自定义单选和复选按钮样式

    2022-07-22 04:01:41
  • 解读@RequestBody与post请求的关系

    2022-10-07 02:02:51
  • Springboot配置文件内容加密代码实例

    2022-09-13 05:56:09
  • asp之家 软件编程 m.aspxhome.com