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中,我们可以使用JSP表达式和JSP脚本来声明和使用变量。其中,JSP表达式使用${ },而JSP脚本则使用<% %>。 JSP表达式 JSP表达式可以用来在页面中输出一个变量的值,或者把表达式的结果赋值给一个变量。使用JSP表达式声明的变量只在当前页面中有效。 示例1: <% String name =…

    Java 2023年6月15日
    00
  • 开发实例:JSP中实现全文检索

    下面我将详细讲解“开发实例:JSP中实现全文检索”的完整攻略,包括开发环境的搭建、代码实现、运行调试等内容。 开发环境搭建 在进行本项目的开发之前,我们需要准备好以下工具: Java 8及以上版本 Apache Tomcat 8及以上版本 Eclipse IDE 步骤: 安装Java并设置环境变量; 下载并解压Tomcat,配置Tomcat的环境变量; 下载…

    Java 2023年6月15日
    00
  • 线程局部变量的作用是什么?

    以下是关于线程局部变量的作用的完整使用攻略: 线程局部变量的作用 线程局部变量是指在多线程编程中,每个线程都拥有自己的变量本,互不干扰的一种变量。线程局部变量可以用来存储线程的状态信息,从而实现线程之间的数据隔离和共享。 线程局部变量的作用主要有以下几个方面: 1. 实现线程之间的数据隔离 在多线程编程中,线程之间的数据隔离是非常重要的。线程局部变量用来存储…

    Java 2023年5月12日
    00
  • Java实现的Base64加密算法示例

    好的!本文将为大家详细讲解如何使用Java实现Base64加密算法,包括编写代码和运行示例,让您能够更好地理解这一加密算法。 什么是Base64加密算法? Base64是一种将二进制数据编码成ASCII字符的编码方式,通常用于对二进制数据进行可读、可传输的编码操作。它是一种通过将二进制数据处理成文本格式的方法,不包含加密和解密操作。 Base64编码会将二进…

    Java 2023年5月20日
    00
  • mybatis入门_动力节点Java学院整理

    MyBatis入门:动力节点Java学院整理 本文将向读者介绍如何快速入门MyBatis框架,并提供相关学习资源和示例代码,希望对初学者有所帮助。 MyBatis框架简介 MyBatis是一款流行的ORM框架,可以与各种主流的数据库进行集成,例如MySQL、Oracle、SQLServer等。它的主要特点是将SQL语句与Java代码分离,使用XML描述SQL…

    Java 2023年5月19日
    00
  • Java安全性的作用是什么?

    Java安全性的作用是确保Java应用程序在运行时不受到恶意攻击或未经授权的访问,从而保护计算机和数据安全。Java安全性涵盖了以下几个方面: 防止未授权访问:通过Java安全管理器,可以控制Java代码对系统资源(如文件、网络等)的访问权,从而防止未经授权的访问和操作。例如,可以通过设置Java安全管理器来限制Java应用程序的读取和写入文件的能力,从而防…

    Java 2023年5月11日
    00
  • SpringMVC前端和后端数据交互总结

    下面是关于“SpringMVC前端和后端数据交互总结”的攻略: 攻略 1. 前端和后端数据交互方式 在SpringMVC中,前端和后端数据交互一般有两种方式:表单提交和AJAX请求。 1.1 表单提交 表单提交是一种比较常见的方式。前端页面通过form表单向后端发送请求,后端接收到请求后会对表单数据进行处理,然后将处理后的结果返回给前端。 以下是一个简单的表…

    Java 2023年5月16日
    00
  • SpringBoot扩展外部化配置的原理解析

    下面我为你详细讲解“SpringBoot扩展外部化配置的原理解析”的攻略。 1. 理解SpringBoot配置管理流程 SpringBoot使用YAML或properties格式的文件来管理应用程序所需的各种配置信息。它们可以分为应用表现配置和逻辑配置两类,其中应用表现配置是指一些与应用程序用户直接交互的配置,例如网站标题和页脚等。逻辑配置是指一些与应用程序…

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