如何在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端口'); })
关键注意事项
- 前端请求要求:必须发送
multipart/form-data类型的请求,且文件输入框的name属性值要和upload.single()的参数完全匹配。 - 文件存储逻辑:Multer会自动将上传文件保存到
dest配置的目录,文件名会被重命名为随机字符串以避免重名冲突。如果需要自定义文件名或存储路径,可以替换dest为storage配置项实现更灵活的存储规则。 - 错误处理:可以添加Express错误中间件捕获Multer抛出的异常,比如文件大小超限、不支持的文件类型等问题(若需限制文件类型,可在Multer配置中添加
fileFilter选项)。
内容的提问来源于stack exchange,提问作者user30266210
相关产品推荐
相关产品推荐

