详解关于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日

相关文章

  • 服务器绝对安全简要设置策略操作指南

    服务器绝对安全简要设置策略操作指南 简介 正常运营网站时,保障服务器的绝对安全是最重要的。因此,我们需要根据实际情况进行一系列的设置策略。本文将介绍最基本的服务器安全设置,以确保服务器的安全性。 步骤 1. 使用高强度密码 设置一个高强度的管理员密码,开启服务器防火墙并仅允许特定IP访问服务器。密码必须包含不同的大小写字母、数字和符号,并且过期后必须更改。如…

    Java 2023年6月15日
    00
  • 如何把springboot jar项目 改为war项目

    首先需要了解的是,Spring Boot默认创建的是JAR项目,JAR包是一种Java的打包格式,跟普通的ZIP包大同小异。而WAR包是Java Web的打包格式。 将Spring Boot jar项目转为war项目,主要需要以下步骤: 1. 修改pom.xml文件 在Spring Boot的Maven项目中,需要在pom.xml文件中添加Web依赖和打包方…

    Java 2023年5月28日
    00
  • java读取excel表格的方法

    下面就为您详细讲解Java读取Excel表格的方法的完整攻略。 准备工作 在开始从Excel表格中读取数据之前,需要准备好以下两个工具: Apache POI:一个用于操作Microsoft文档格式文件的Java API。具体来讲,就是用于在Java程序中读取、写入和操作各种Microsoft文件,如Excel文件、Word文档、PowerPoint演示文稿…

    Java 2023年5月19日
    00
  • JSP response对象实现文件下载的两种方式

    我会为您详细讲解“JSP response对象实现文件下载的两种方式”的完整攻略。 下载文件是Web开发中非常常见的功能之一。在JSP中,我们可以使用response对象来实现文件下载的功能。具体来说,实现文件下载可以采用两种方式: 1. 使用response的OutputStream方式 使用response的OutputStream方式的基本流程如下: …

    Java 2023年6月15日
    00
  • jquery ajaxfileupload异步上传插件

    jquery ajaxfileupload异步上传插件是一款可以在页面上实现文件异步上传的插件,可以帮助我们更方便地实现文件上传功能,并且使用方便、易于操作。下面是这款插件的完整攻略: 一、安装和引用 jquery ajaxfileupload异步上传插件可以使用npm包管理器进行安装,也可以使用CDN引入。以下是使用CDN引入的方法: <script…

    Java 2023年5月20日
    00
  • Java实现宠物商店管理系统

    Java实现宠物商店管理系统完整攻略 1. 需求分析 首先,我们需要明确商店管理系统所具备的功能,包括但不限于以下几个方面: 宠物信息管理 宠物类别管理 宠物销售管理 宠物库存管理 宠物订单管理 2. 系统设计 基于需求,我们可以设计出宠物商店管理系统的基本架构,其中包括以下几个模块: 宠物信息管理模块 宠物类别管理模块 宠物销售管理模块 宠物库存管理模块 …

    Java 2023年5月24日
    00
  • Javaweb实现上传下载文件的多种方法

    Javaweb实现上传下载文件的多种方法攻略 在开发Javaweb应用时,文件的上传和下载是非常常见的需求。本文将介绍Javaweb实现上传下载文件的多种方法,并提供两个代码示例。 上传文件的几种方式 1. 使用Servlet API实现文件上传 使用Servlet API实现文件上传需要使用标准的 javax.servlet 库中配套的 HttpServl…

    Java 2023年5月19日
    00
  • Hibernate+JDBC实现批量插入、更新及删除的方法详解

    Hibernate+JDBC实现批量插入、更新及删除的方法详解 本文将介绍如何使用Hibernate+JDBC实现批量插入、更新及删除数据的方法。 数据库连接 首先,我们需要在Hibernate的配置文件中配置数据库连接信息,以便在后续操作中使用: <property name="hibernate.connection.driver_cla…

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