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

使用Multer上传图片遇ENOENT错误,修改app.js后问题仍未解决

解决Multer上传图片时的ENOENT目录不存在错误

嘿,这个问题我碰到过好多次啦!核心原因其实很明确:Multer的diskStorage并不会自动帮你创建目标上传目录,当你代码里指定的./uploads文件夹不存在时,就会抛出这个ENOENT错误。下面是一步步帮你搞定的方案:

1. 确保上传目录存在(两种可选方式)

方式一:手动创建目录

最简单的临时解决办法,直接在你的项目根目录下执行命令创建文件夹:

mkdir uploads

不过这种方式在部署新环境或者换机器时容易忘,更推荐用代码自动处理。

方式二:用Node.js的fs模块自动创建目录

修改你的代码,引入fs模块,在配置Multer的storage之前,先检查并自动创建目录。这样不管环境怎么变,都不会出问题:

var multer = require('multer');
var path = require('path');
var fs = require('fs'); // 新增引入fs模块
var uuidv1 = require('uuid/v1'); // 记得先npm install uuid哦

global.appRoot = __dirname;
// 生成绝对路径,避免相对路径的坑
var uploadsDir = path.join(appRoot, 'uploads');

// 检查目录是否存在,不存在就创建(recursive: true支持创建多级目录)
if (!fs.existsSync(uploadsDir)) {
  fs.mkdirSync(uploadsDir, { recursive: true });
}

var storage = multer.diskStorage({
  destination: function(req, file, callback) {
    // 这里用刚才生成的绝对路径
    callback(null, uploadsDir);
  },
  filename: function(req, file, callback) {
    callback(null, file.fieldname + '-' + uuidv1() + path.extname(file.originalname));
  }
})

var upload = multer({ storage: storage }); // 补全你之前没写完的配置

2. 避开相对路径的陷阱

你之前用的./uploads是相对路径,它的参考是Node.js进程的启动目录,而不是你的app.js所在的目录。比如如果你从项目的上级目录启动Node,./uploads就会跑到上级目录去,自然找不到。用path.join(__dirname, 'uploads')生成绝对路径,能彻底解决这个问题。

3. 最后几个检查点

  • 确认你的项目目录权限正常,Node.js进程有读写uploads目录的权限;
  • 如果你还没装uuid包,记得先执行npm install uuid;
  • 如果你用的是uuidv4或者其他版本,对应调整引入方式就行。

这样修改后,Multer就能正常找到上传目录,不会再抛出那个烦人的ENOENT错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:35:08