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

使用Postman上传图片到Cloudinary出现ENOENT无此文件或目录错误

错误原因
  • 核心原因:Multer 的 diskStorage 不会自动创建不存在的目标目录。你代码中指定的存储路径为 ./storage/media,但当前项目根目录下不存在对应层级的文件夹,写入文件时就会触发 ENOENT: no such file or directory 报错。
  • 路径不匹配问题:你的预期是将文件保存到 public/upload_files 文件夹,但代码里的目标路径配置和预期不符,哪怕目录存在,文件也会存储到错误位置。
修复方案

首先确保你已经引入了所需的核心模块:

const multer = require('multer');
const path = require('path');
const fs = require('fs');

修改后的完整 Multer 配置如下,会自动创建目标目录、修正存储路径,同时补充了更合理的校验规则:

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // 拼接绝对路径,避免跨平台路径兼容问题
    const uploadDir = path.resolve(__dirname, './public/upload_files');
    // 递归创建目录,父目录不存在时也会自动创建
    fs.mkdirSync(uploadDir, { recursive: true });
    cb(null, uploadDir);
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + path.extname(file.originalname));
  },
});

const filefilter = (req, file, cb) => {
  // 补充文件类型校验,避免恶意文件上传
  const allowedImageTypes = ['image/jpeg', 'image/png', 'image/gif'];
  if (allowedImageTypes.includes(file.mimetype)) {
    cb(null, true);
  } else {
    cb(new Error('仅支持上传jpg、png、gif格式的图片'), false);
  }
};

const upload = multer({
  storage: storage,
  // 单文件上传用fileSize限制单文件大小,比fieldSize更贴合需求
  limits: { fileSize: 10 * 1024 * 1024 },
  fileFilter: filefilter,
});
额外注意事项
  • 配置接口路由时,确保你使用了正确的 Multer 中间件,单文件上传对应 upload.single('表单字段名'),多文件上传对应 upload.array('表单字段名', 最大数量),Postman 上传时的表单字段名要和代码配置保持一致。
  • 如果项目有静态资源托管规则,确保 public/upload_files 路径已经被配置为静态资源目录,后续才能正常访问上传后的图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:03