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

下面是springmvc中下载中文文件名称为下划线的解决方案的基本步骤:

  1. 在Controller中获取文件
    @GetMapping("/download")
    public ResponseEntity<ByteArrayResource> downloadFile(HttpServletRequest request) throws IOException {
    // 获取文件路径
    String path = request.getSession().getServletContext().getRealPath("/file/测试文件.txt");
    // 读取文件
    File file = new File(path);
    FileInputStream fis = new FileInputStream(file);
    byte[] data = new byte[(int) file.length()];
    fis.read(data);
    fis.close();
    // 设置文件名
    String fileName = new String("测试文件.txt".getBytes("UTF-8"), "ISO-8859-1");
    // 返回文件流
    ByteArrayResource resource = new ByteArrayResource(data);
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition", "attachment;filename=" + fileName);
    return ResponseEntity.ok().headers(headers).contentLength(file.length())
    .contentType(MediaType.parseMediaType("application/octet-stream")).body(resource);
    }

    其中,设置文件名需要注意编码转换,将中文文件名从UTF-8编码转换为ISO-8859-1编码。这是由于浏览器默认使用ISO-8859-1编码,而中文文件名使用UTF-8编码容易出现乱码。

  2. 配置springmvc.xml文件
    在springmvc.xml文件中配置编码字符集过滤器,用于将请求的参数进行编码转换。

<bean id="characterEncodingFilter" class="org.springframework.web.filter.CharacterEncodingFilter">
<property name="encoding" value="UTF-8" />
<property name="forceEncoding" value="true" />
</bean>

以下是两个示例:

示例1:文件名为中文

在以下示例中,我们将在Controller中返回一个文件,文件名为“测试文件.txt”。

  1. 在src/main/resources下创建文件夹file,并在里面新增文件“测试文件.txt”。
  2. 编写Controller代码:

@GetMapping("/download")
public ResponseEntity<ByteArrayResource> downloadFile(HttpServletRequest request) throws IOException {
// 获取文件路径
String path = request.getSession().getServletContext().getRealPath("/file/测试文件.txt");
// 读取文件
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();
// 设置文件名
String fileName = new String("测试文件.txt".getBytes("UTF-8"), "ISO-8859-1");
// 返回文件流
ByteArrayResource resource = new ByteArrayResource(data);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment;filename=" + fileName);
return ResponseEntity.ok().headers(headers).contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream")).body(resource);
}

在以上代码中,设置文件名需要注意编码转换,将中文文件名从UTF-8编码转换为ISO-8859-1编码。

  1. 访问http://localhost:8080/download,浏览器会自动弹出文件下载对话框,文件名显示为“测试文件.txt”。

示例2:文件名包含空格和特殊符号

在以下示例中,我们将在Controller中返回一个文件,文件名为“test download file.txt”。

  1. 在src/main/resources下创建文件夹file,并在里面新增文件“test download file.txt”。如果需要包含空格,需要用%20进行url转义。
  2. 编写Controller代码:

@GetMapping("/download")
public ResponseEntity<ByteArrayResource> downloadFile(HttpServletRequest request) throws IOException {
// 获取文件路径
String path = request.getSession().getServletContext().getRealPath("/file/test%20download%20file.txt");
// 读取文件
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();
// 设置文件名
String fileName = new String("test download file.txt".getBytes("UTF-8"), "ISO-8859-1");
// 返回文件流
ByteArrayResource resource = new ByteArrayResource(data);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment;filename=" + fileName);
return ResponseEntity.ok().headers(headers).contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream")).body(resource);
}

在以上代码中,我们需要对含有空格的文件名进行转义解析。同时,需要注意设置文件名的编码格式,将UTF-8编码转换为ISO-8859-1编码。

  1. 访问http://localhost:8080/download,浏览器会自动弹出文件下载对话框,文件名显示为“test download file.txt”。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc中下载中文文件名称为下划线的解决方案 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • jsp下显示中文文件名及绝对路径下的图片解决方法

    下面是详细讲解“jsp下显示中文文件名及绝对路径下的图片解决方法”的完整攻略。 问题描述: 在jsp页面中,有时需要显示中文文件名或访问绝对路径下的图片,但这些操作并不是很直接,需要做一些额外的处理。 解决方案: 1. 文件名中文显示 在jsp页面中,如果要显示中文文件名,需要注意两点: 页面编码要设置为UTF-8,否则中文文件名会乱码。 使用URLEnco…

    Java 2023年6月15日
    00
  • Java中使用HttpRequest获取用户真实IP地址

    获取用户真实IP地址是Web开发中一个非常重要的问题,这篇文章将详细讲解在Java中使用HttpRequest获取用户真实IP地址的完整攻略。 什么是用户真实IP地址 用户真实IP地址指的是用户连接Internet时获得的IP地址,这个IP地址被称为公网IP地址,因为这个IP地址是在Internet上唯一的,并且可以标识这个用户所在位置的唯一标识。 如何获取…

    Java 2023年6月15日
    00
  • SpringBoot数据访问自定义使用Druid数据源的方法

    下面是完整攻略: 1. 什么是Druid数据源 Druid是阿里巴巴开源的数据库连接池,也是一个数据源的实现类,它集成了多个功能,包括连接池、应用层监控、SQL监控、防御SQL注入攻击、分布式调用链、日志等,被广泛应用于互联网企业的数据连接使用场景。Druid更详细的介绍可以参考其官方文档 https://github.com/alibaba/druid。 …

    Java 2023年5月20日
    00
  • java 两阶段终止线程的正确做法

    Java中线程的终止一直是个比较重要的话题,如果终止线程不当,可能会导致内存泄漏、死循环等问题。本文将详细介绍Java中两阶段终止线程的正确做法,并且提供两个示例进行说明。 什么是两阶段终止模式 两阶段终止模式是指在终止线程时采用两个阶段的方式进行终止,第一阶段发送一个中断信号以告诉线程需要终止,第二阶段等待线程终止。 两阶段终止模式的主要原理是,在第一阶段…

    Java 2023年5月19日
    00
  • IDEA下lombok安装及找不到get,set的问题的解决方法

    IDEA下lombok安装及找不到get,set的问题的解决方法 什么是Lombok Lombok是一个Java库,旨在通过注解的形式来简化Java对象的样板代码,例如Getter/Setter方法、构造函数、toString()方法等。Lombok可以使开发人员编写代码更加简短、易读和易于维护。通过引入Lombok库,Java开发人员可以使代码更加简洁,在…

    Java 2023年5月27日
    00
  • Java环境中MyBatis与Spring或Spring MVC框架的集成方法

    下面是关于“Java环境中MyBatis与Spring或Spring MVC框架的集成方法”的完整攻略,包含两个示例说明。 Java环境中MyBatis与Spring或Spring MVC框架的集成方法 在Java环境中,MyBatis与Spring或Spring MVC框架的集成非常常见。在本文中,我们将介绍如何将MyBatis与Spring或Spring…

    Java 2023年5月17日
    00
  • Java实现基础银行ATM系统

    Java实现基础银行ATM系统攻略 系统概述 本系统旨在实现一个基础的银行ATM系统,主要功能包括用户登录、账户查询、取款、存款、转账等。 系统设计 数据库设计 本系统采用MySQL数据库来存储用户信息、账户信息等,包括以下两张表: 用户信息表 ID:用户ID,唯一标识用户 Name:用户姓名 Phone:电话号码 Password:密码,用于登录ATM系统…

    Java 2023年5月24日
    00
  • Java点餐小程序之黑心商人

    Java点餐小程序之黑心商人完整攻略 简介 这是一款基于Java实现的点餐小程序,允许用户查看、点餐、结算等操作,并包含了“黑心商人”功能,允许商家设置并收取“加急费”、“删单费”等不合理费用。作为一名程序员,我们应该注重代码的质量,不容忍这种黑心商业行为,本文将详细讲解该小程序的实现过程,并提供几条防止黑心商户的方法。 整体思路 该小程序主要分为前台用户界…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部