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

使用Multer上传包时希腊字符编码错误问题求助

解决Multer上传希腊字符文件名乱码问题

问题原因

浏览器传递UTF-8编码的文件名(比如希腊字符)时,默认会用latin1编码解析,导致保存后出现乱码(像你遇到的ΠÏξ Îαξ & ÎαÏÏιμιÏαίοι)。你之前在上传完成后修改req.files的方法无效,因为Multer已经用原始乱码文件名完成了文件保存,事后修改不影响已保存的文件。

解决方法

直接在Multer的diskStorage配置的filename回调里完成编码转换,生成正确的UTF-8文件名后再执行保存操作。同时注意在fileFilter里也要先转码再解析扩展名,避免合法文件被误拦截。

修改后的完整代码:

const storage = multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    // 核心修改:将latin1编码的文件名转成UTF-8
    const correctFilename = Buffer.from(file.originalname, 'latin1').toString('utf8');
    callback(null, correctFilename);
  }
});
var limits = {
  files: 100,
  fileSize: 50000000
};
var upload = multer({
  storage: storage,
  fileFilter: function (req, file, callback) {
    // 先转码再取扩展名,避免乱码导致解析错误
    const correctFilename = Buffer.from(file.originalname, 'latin1').toString('utf8');
    var ext = path.extname(correctFilename);
    if (ext !== '.mp3' && ext !== '.wav' && ext !== '.m4a' && ext !== '.flac' && ext !== '.aac') {
      return callback(new Error('You can only upload audio files.'))
    }
    callback(null, true)
  },
  limits: limits
}).any('file');

额外提示

如果你的部署系统对文件名有特殊字符限制,可以在转码后添加文件名清洗逻辑,但希腊字符本身在大多数现代操作系统中都是支持的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:16:08