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

Node.js/Express.js图片上传扩展名丢失问题求助

解决Multer上传图片丢失扩展名的问题

你的问题出在代码中错误使用了file.ext——Multer的文件对象里并没有这个属性,导致生成的文件名丢失了扩展名。以下是修正方案:

步骤1:引入path模块

Node.js的path模块可以帮我们方便地解析文件名和扩展名,先在代码顶部引入:

const path = require('path');

步骤2:修正diskStorage的filename函数

从file.originalname(包含完整原始文件名和扩展名)中提取扩展名,替换原来的file.ext:

var storage = multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    // 提取文件原始扩展名
    const fileExt = path.extname(file.originalname);
    // 生成唯一文件名:时间戳 + 原始文件名(不含扩展名) + 扩展名
    const fileName = `${Date.now()}-${path.basename(file.originalname, fileExt)}${fileExt}`;
    callback(null, fileName);
  }
});

var upload = multer({ storage: storage }).any('userPhoto');
const uploadavatar = function (req, res) {
  upload(req,res,function(err) {
      if(err) {
          return res.end("Error uploading file." + err);
      }
      res.end("File is uploaded");
  });
}; 

关键说明

  • path.extname(file.originalname):从原始文件名中提取扩展名(例如.jpg、.png)
  • path.basename(file.originalname, fileExt):获取去掉扩展名的原始文件名,避免文件名重复的同时保留原始标识
  • 如果不需要保留原始文件名,也可以简化为callback(null, Date.now() + fileExt),直接用时间戳加扩展名生成唯一文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:33:16