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

使用multer上传文件触发ENOENT错误,请求问题排查

问题分析与解决

核心原因

你遇到的ENOENT: no such file or directory错误,本质是multer不会自动创建你指定的uploads目录。当代码尝试把上传的文件写入这个目录时,系统找不到对应的文件夹,就会触发这个报错。

两种解决办法

办法1:手动建文件夹

直接到你的项目根目录C:\Users\hp\Desktop\node_tut下,新建一个名为uploads的文件夹。重启服务后再用Postman测试,就能正常上传了。

办法2:代码自动创建目录(更稳妥)

用Node.js自带的fs模块,在代码启动时检查并自动创建uploads目录,避免每次手动操作。修改后的代码如下:

const express = require("express");
const multer = require("multer");
const fs = require("fs");
const path = require("path");
const app = express();

// 定义uploads目录的绝对路径
const uploadDir = path.join(__dirname, "uploads");
// 检查目录是否存在,不存在则创建
if (!fs.existsSync(uploadDir)) {
  fs.mkdirSync(uploadDir, { recursive: true });
}

const upload = multer({
  storage: multer.diskStorage({
    destination: function(req, file, cb) {
      cb(null, uploadDir);
    },
    filename: function(req, file, cb) {
      // 保留原文件的扩展名,避免强制转成png导致文件损坏
      const fileExt = path.extname(file.originalname);
      cb(null, `${file.fieldname}-${Date.now()}${fileExt}`);
    }
  })
}).single("user_file");

app.post("/upload", upload, (req, resp) => {
  resp.send("文件上传成功");
});

app.listen(5000, () => {
  console.log("服务器运行在5000端口");
});

额外提示:

  • 用path.join(__dirname, "uploads")可以避免相对路径的不确定性,确保目录定位准确。
  • 原代码里强制把所有文件改成.png后缀,上传非图片文件会导致文件损坏,建议保留原扩展名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:12:13