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

如何在Node.js中使用Multer包将文件上传至服务器文件夹?

问题修复与实现说明

代码中的错误点

  • 路由声明里的App.post是笔误,要改成小写的app.post,和你创建的Express实例保持一致。
  • upload.single()必须传入前端表单文件字段的名称(比如前端代码里<input type="file" name="document">的name值),否则Multer无法识别要处理的目标文件。
  • 使用upload.single()处理单文件上传时,文件信息会存在req.file而非req.files,req.files是处理多文件批量上传(比如upload.array())时才会用到的变量。

修正后的完整代码

const express = require('express');
const multer = require('multer');
const app = express();

// 配置Multer,指定文件存储目录和大小限制
const upload = multer({
  dest: "./documents/",
  limits: {
    fileSize: 1000000000 // 限制文件大小为1GB,单位是字节
  }
})

// 处理单文件上传的路由,参数'document'对应前端表单的file字段name
app.post('/api/documents', upload.single('document'), function (req, res) {
  // 校验是否有文件上传
  if (!req.file) {
    return res.status(400).send('未上传任何文件');
  }

  // 文件已被Multer自动保存到./documents/目录下
  // 这里可以添加自定义业务逻辑,比如返回文件信息
  res.json({
    message: '文件上传成功',
    fileInfo: {
      originalName: req.file.originalname,
      savedFileName: req.file.filename,
      fileSize: req.file.size
    }
  });
})

// 启动服务器监听端口
app.listen(3000, () => {
  console.log('服务器运行在3000端口');
})

关键注意事项

  1. 前端请求要求:必须发送multipart/form-data类型的请求,且文件输入框的name属性值要和upload.single()的参数完全匹配。
  2. 文件存储逻辑:Multer会自动将上传文件保存到dest配置的目录,文件名会被重命名为随机字符串以避免重名冲突。如果需要自定义文件名或存储路径,可以替换dest为storage配置项实现更灵活的存储规则。
  3. 错误处理:可以添加Express错误中间件捕获Multer抛出的异常,比如文件大小超限、不支持的文件类型等问题(若需限制文件类型,可在Multer配置中添加fileFilter选项)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:06:16