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

使用Express.js的Multer存储表单图片遇ENOENT错误求助

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

错误原因

错误信息明确提示找不到目标目录:

Error: ENOENT: 没有该文件或目录,打开 'C:\Users\Dunia Dunia\Desktop\Coding my career\Nodejs\Full-Recap\images\2023-01-05T22:58:24.937Z-firstpic.jpg'

Multer的diskStorage不会自动创建destination指定的目录,当项目根目录下未手动创建images文件夹时,就会触发该错误。

解决方案

方案1:手动创建目录

直接在项目根目录下新建名为images的文件夹,重启服务后重新测试上传功能即可。

方案2:代码自动创建目录

通过Node.js的fs模块在代码中检查并自动创建目录,避免手动操作的麻烦。修改后的App.js代码如下:

const multer = require('multer');
const path = require('path');
const fs = require('fs'); // 引入fs模块

const fileStorage = multer.diskStorage({
    destination: (req, file, cb) => {
        const imageDir = path.join(__dirname, 'images');
        // 检查目录是否存在,不存在则递归创建
        fs.access(imageDir, (err) => {
            if (err) {
                return fs.mkdir(imageDir, { recursive: true }, (mkdirErr) => {
                    cb(mkdirErr, imageDir);
                });
            }
            cb(null, imageDir);
        });
    },
    filename: (req, file, cb) => {
        // Windows系统下文件名不能包含冒号,替换ISO日期中的冒号为横杠
        const safeFilename = new Date().toISOString().replace(/:/g, '-') + '-' + file.originalname;
        cb(null, safeFilename);
    } 
});

app.use(multer({storage: fileStorage}).single('image'));

额外注意事项

Windows系统中文件名不允许包含:字符,而new Date().toISOString()生成的字符串会带有冒号,因此需要将其替换为合法字符(比如横杠),否则后续访问上传的文件时可能会出现异常。

验证配置正确性

你的EJS表单配置是正确的:

  • 表单设置了enctype="multipart/form-data",支持文件上传
  • 文件输入框的name="image"与Multer的single('image')参数匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:35:16