Spring上传文件乱码问题(问号版)

香蕉少侠 / 2024-09-27 / 原文

Spring上传文件乱码问题(问号版)

目录
  • Spring上传文件乱码问题(问号版)
    • 一、问题描述:
    • 二、原因分析
    • 三、解决办法

一、问题描述:

spring项目上传文件,后端接收文件并获取文件名称,名称中文变成 “?”,例如:??abc()??.xml,其中问号为中文字符

// 前端传递参数
MultipartFile file
//后端获取filename
String originalFilename = file.getOriginalFilename();

二、原因分析

该系统使用的zuul作为分布式网关,处理传入请求时,将对参数进行解码,以便他们可用于zuul过滤器中的可能修改,然后在路由过滤器中构建后端请求时重新编码他们。重新编码的过程中因为编码不一致导致出现中文变问号的乱码情况。这种情况无法通过获取文件名后对已经出现问号的文件名进行重新编码解决。

问题是在spring-cloud-zuul在解析文件名的时候会做处理:

三、解决办法

网上百度有很多文章,总结下来就是两种解决办法。

1、修改zuul的配置,添加zuu.servlet-path: /

这样解决不需要前端修改,方便快捷。已验证可以解决上述问题。

# 解决上传文件,文件名名称中包含特殊字符转变成问号
zuul:
  servlet-path: /

2、网上所说的方式,api接口前面 /zuul:

在不修改zuul默认配置参数的情况下,在上传文件的请求路径之前添加字符串“zuul”声明此请求被ZuulServlet处理。
例如在当前代码下,请求路径是:
localhost:8080/up/upload
那么采用方案一解决中文乱码的请求路径就是:
localhost:8080/zuul/up/upload
经过测试,中文乱码问题成功解决。

参考文章:https://blog.csdn.net/weixin_43221207/article/details/108538277