You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决antd Upload组件韩文文件名上传乱码问题

解决Ant Design Upload组件韩文文件名上传乱码问题

韩文文件名上传后出现乱码(如다운로드.jfif变为ë¤ì´ë¡ë_.jfif),本质是UTF-8编码的文件名被错误解析为ISO-8859-1编码导致的,以下是具体解决方法:

前端处理方案

1. 自定义上传请求,手动编码文件名

通过customRequest覆盖默认上传逻辑,对文件名进行URI编码后再上传:

import axios from 'axios';

const customRequest = async ({ file, onSuccess, onError }) => {
  const formData = new FormData();
  // 对韩文文件名进行URI编码
  const encodedFileName = encodeURIComponent(file.name);
  formData.append('image', file, encodedFileName);
  
  try {
    const res = await axios.post('/your-upload-api', formData, {
      headers: { 'Content-Type': 'multipart/form-data' }
    });
    onSuccess(res.data);
  } catch (err) {
    onError(err);
  }
};

在Upload.Dragger中添加该配置:

<Upload.Dragger
  name="image" 
  multiple            
  listType="picture"
  onChange={onChangeImages}
  beforeUpload={onBeforeUpload}                        
  onPreview={onImagePreview}
  customRequest={customRequest} // 新增自定义上传逻辑
>
  {/* 原有内容 */}
</Upload.Dragger>

2. 修改beforeUpload处理文件名

若无需完全自定义上传,可在beforeUpload中对文件名编码(需配合后端解码):

const onBeforeUpload = (file) => {
  // 重命名文件对象的name属性为编码后的值
  file.name = encodeURIComponent(file.name);
  return true;
};

后端处理方案(核心解决环节)

大部分乱码问题出在后端接收时未正确解码,需根据后端语言调整:

Java Spring Boot示例

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.nio.charset.StandardCharsets;

@PostMapping("/upload")
public String uploadFile(@RequestParam("image") MultipartFile file) {
  String originalName = file.getOriginalFilename();
  // 将ISO-8859-1编码的文件名转成UTF-8
  String decodedName = new String(originalName.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
  // 执行文件保存逻辑
  return decodedName;
}

Node.js Express示例

const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer();

app.post('/upload', upload.single('image'), (req, res) => {
  // 手动转码解决乱码
  const fileName = req.file.originalname;
  const decodedFileName = decodeURIComponent(escape(fileName));
  // 保存文件逻辑
  res.send(decodedFileName);
});

服务器配置补充

  • Tomcat:在server.xml的Connector标签添加URIEncoding="UTF-8"
  • Nginx:在server或location块添加charset utf-8;

内容的提问来源于stack exchange,提问作者Clloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:20:29