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

使用Multer在Node.js中上传文件时req.file返回undefined的问题

Mac系统下Multer无法上传文件(req.file为undefined)的解决方案

问题:在Mac系统中使用Node.js的multer包无法上传任何文件或图片,但相同代码在Windows系统可正常运行。用Postman调用API后,控制台打印的req.file为undefined。相关代码如下:

const express = require('express');
const app = express();
const multer  = require('multer');
const storage = multer.diskStorage({
   destination: function (req, file, cb) {
     cb(null, 'uploads')
   },
   filename: function (req, file, cb) {
      console.log(file)
   //   const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
     cb(null, file.originalname)
   }
 })
const upload = multer({storage: storage})

app.post('/post', upload.single('avatar'), (req,res)=>{
console.log(req.file)
   if (!req.file) {
      return res.status(400).send([{ msg: "File is missing",err }])
    }
else{
   return res.status(200).send([{ msg: "working", }])
}
});
app.listen(3000,(err,succes)=>{
 if (err) {
    console.log(err)
 }else{
    console.log("Server is running in port number",3000)
 }
});

解决方法

  • 检查uploads目录权限与存在性
    Mac系统对文件权限管控更严格,先确认项目根目录下的uploads目录存在,且Node进程有读写权限:

    • 终端执行创建目录:mkdir uploads
    • 赋予基础权限:chmod 755 uploads(生产环境不建议用777权限)
  • 验证Postman请求格式
    确保Postman的POST请求使用form-data格式,且文件对应的键名是avatar(需与代码中upload.single('avatar')的参数完全一致),不要使用raw、binary等其他格式。

  • 修复代码中的语法错误
    原代码返回400响应时引用了未定义的err变量,会导致服务器报错中断请求,修改为:

    return res.status(400).send([{ msg: "File is missing" }])
    
  • 重新安装multer确保版本兼容
    不同系统下依赖包可能存在版本差异,重新安装multer:

    npm uninstall multer
    npm install multer
    
  • 改用绝对路径指定上传目录
    相对路径在不同系统的解析逻辑可能不同,用绝对路径避免路径解析错误:

    const path = require('path');
    const storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, path.join(__dirname, 'uploads'))
      },
      filename: function (req, file, cb) {
        console.log(file)
        cb(null, file.originalname)
      }
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:31:18