使用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
相关产品推荐
相关产品推荐

