详解关于java文件下载文件名乱码问题解决方案

关于Java文件下载时文件名乱码问题,可以使用以下方案解决:

方案一:使用Content-Disposition和URLEncoder

在Java中,可以使用Content-Disposition响应头设置文件下载时的文件名,再使用URLEncoder对文件名进行编码,如下:

response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

其中,fileName为文件原始名称,在服务器端需要先转换为UTF-8编码。

示例代码:

@RequestMapping("/download")
public ResponseEntity<byte[]> downloadFile() throws Exception {
    // 模拟文件下载,获取文件流和文件名
    InputStream is = new FileInputStream(new File("D:/temp/测试文件.xlsx"));
    String fileName = "测试文件.xlsx";
    // 设置响应头
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    // 设置响应内容
    byte[] bytes = new byte[is.available()];
    is.read(bytes);
    HttpStatus statusCode = HttpStatus.OK;
    ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(bytes, headers, statusCode);
    return response;
}

方案二:使用HttpResponseHeader

在Webservice调用java端方法时
- 需使用文件名称,而不是流名称传递;
- 规范化的在文件名称中尽量不要包含特殊字符,如”+”,“=”等;
- 在传递文件名称时,使用HTTP响应头进行实现;

具体实现代码:

public void downLoadFile(@WebParam(name = "fileName")
String fileName, @WebParam(name = "filePath")
String filePath, @WebParam(name = "response")
HttpServletResponse response) throws Exception {
File file = new File(filePath);
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
out = response.getOutputStream();
response.setHeader("Content-Disposition", "attachment;filename=" +
new String(fileName.getBytes("GB2312"), "ISO-8859-1"));
response.setContentType("application/octet-stream");
byte[] buffer = new byte[1024];
int readLength = in.read(buffer);
while (readLength != -1) {
out.write(buffer, 0, readLength);
readLength = in.read(buffer);
}
} catch (IOException ex) {
LOGGER.error("下载文件异常:{}", ex.getMessage(), ex);
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.flush();
out.close();
}
}
}

以上这两种方法都可以有效解决Java文件下载时文件名乱码的问题。其中,方案二还适用于Webservice调用Java端方法时下载文件时文件名乱码问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解关于java文件下载文件名乱码问题解决方案 - Python技术站

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

相关文章

  • JavaSpringBoot报错“DataIntegrityViolationException”的原因和处理方法

    原因 “DataIntegrityViolationException” 错误通常是以下原因引起的: 数据库约束问题:如果您的数据库约束存在问题,则可能会出现此错误。在这种情况下,您需要检查您的数据库约束并确保它们正确。 数据库操作问题:如果您的数据库操作存在问题,则可能会出现此错误。在这种情况下,您需要检查您的数据库操作并确保它们正确。 数据库连接问题:如…

    Java 2023年5月4日
    00
  • GC日志的作用是什么?

    GC日志记录了JVM的垃圾回收情况,它可以用于以下方面: 监控应用程序的垃圾回收情况,包括垃圾回收的频率、GC暂停时间、堆大小等信息,以便我们调优应用程序。 检测内存泄漏问题,比如频繁Full GC、对象存活时间过长等问题,通过GC日志中的统计数据,我们可以发现这些问题,并进行排查。 使用GC日志的步骤如下: 启用GC日志 通过以下JVM参数启用GC日志:-…

    Java 2023年5月10日
    00
  • Tomcat 多站点配置详解及实现方法

    下面是关于 “Tomcat 多站点配置详解及实现方法” 的完整攻略,包含以下内容: 一、前提条件 在进行 Tomcat 多站点配置前,需要提前了解以下几个知识点: Tomcat 的部署方式 基本的 Tomcat 目录结构 虚拟主机的概念 DNS 解析的原理和流程 二、基本步骤 Tomcat 多站点配置的基本流程如下: 创建虚拟主机配置 在 Tomcat 的 …

    Java 2023年5月19日
    00
  • 从零开始在Centos7上部署SpringBoot项目

    从零开始在CentOS7上部署Spring Boot项目,大致分为以下几个步骤: 安装Java环境 在CentOS7上部署Spring Boot项目,首先需要安装Java环境。可以通过以下命令安装: yum install java-1.8.0-openjdk-devel 安装完成后,可以通过以下命令查看Java版本: java -version 安装Mav…

    Java 2023年5月20日
    00
  • java 抛出异常处理的方法

    Java 是一门强类型的面向对象编程语言,拥有强大的异常处理机制。在实际的编码过程中,异常处理一直是开发者必备的技能。本文将详细介绍 Java 抛出异常处理的方法。 1. 异常 异常即 Java 中不正常的情况,是指代码执行过程中,出现了异常事件,导致了程序的中断、退出或者崩溃等情况。Java 中将异常分为三类:受检异常、非受检异常和错误。 受检异常:编译器…

    Java 2023年5月27日
    00
  • Spring MVC集成springfox-swagger2构建restful API的方法详解

    Spring MVC集成springfox-swagger2构建restful API的方法详解 Swagger 是一种流行的 API 文档工具,用于生成和管理 RESTful API 文档。在 Spring MVC 项目中,我们可以使用 springfox-swagger2 库来集成 Swagger,并使用 Swagger 来构建 RESTful API …

    Java 2023年5月18日
    00
  • MySQL数据库 JDBC 编程(Java 连接 MySQL)

    MySQL数据库 JDBC 编程(Java 连接 MySQL)攻略 1. 准备工作 在进行 MySQL JDBC 编程前,我们需要完成以下准备工作: 1.1 安装 MySQL 数据库 MySQL 数据库官网提供了各个平台下的安装包,我们可以根据自己的操作系统下载并安装 MySQL 数据库。 1.2 下载 MySQL JDBC 驱动 MySQL JDBC 驱动…

    Java 2023年5月19日
    00
  • PTA题目集4~6总结

    一前言   题目集四主要考察的是对LocalDate,ArrayList,HashSet等Java自带类的使用   题目集五主要考察的是对正则表达式的使用,以及对其题目集三的时间题目的进行类结构的改变   题目集六只有一道题,主要是对题目集四的第一题进行加大难度   总的来说这几次的题目量比前面几次都要少,但是题目难度开始加深。 二设计与分析    由于部分…

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