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

使用Multer实现文件上传接口:文件成功上传但Postman返回404错误

解决文件上传成功但Postman返回404的问题

我一眼就看出问题出在你的upload.js路由处理函数的参数顺序上,这是个很容易踩的Express小坑!

问题根源

你现在写的路由处理函数是这样的:

router.post("/", upload.single("excel"), (err, req, res, next) => {
  res.status(200).json({ message: "Uploaded successfully" });
});

在Express里,第一个参数是err的函数是专门的错误处理中间件,只有当之前的中间件调用next(err)时才会触发它。而正常的路由处理函数的参数顺序应该是(req, res, next)。

现在的情况是:Multer确实完成了文件上传的逻辑,但上传完成后,Express找不到一个正常的路由处理函数来响应请求(因为你把处理逻辑写在了错误处理中间件里),所以就返回了404错误。

修正方案

把upload.js里的路由处理函数参数调整成正常顺序即可,如果需要处理Multer的上传错误,可以额外添加错误处理逻辑:

修正后的upload.js

const express = require("express");
const router = express.Router();
const multer = require("multer");
const storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, "./uploads/");
  },
  filename: function(req, file, cb) {
    cb(null, file.originalname);
  }
});
const upload = multer({ storage, limits: { fileSize: 1024 * 1024 * 100 } });

// 正常的路由处理函数,参数顺序正确
router.post("/", upload.single("excel"), (req, res, next) => {
  res.status(200).json({ message: "Uploaded successfully" });
});

// 可选:添加专门的错误处理中间件来捕获Multer的上传错误(比如文件过大)
router.use((err, req, res, next) => {
  if (err instanceof multer.MulterError) {
    // 处理Multer相关错误
    return res.status(400).json({ message: "上传错误:" + err.message });
  } else if (err) {
    // 处理其他错误
    return res.status(500).json({ message: "服务器内部错误" });
  }
});

module.exports = router;

验证效果

修改后重新启动服务器,用Postman调用POST /upload接口,现在应该既能成功上传文件,又能收到200状态码的成功响应了。

内容的提问来源于stack exchange,提问作者Enamul Karim Tamzid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:33:15