Multer 是一个 Node.js 中间件,用于处理 multipart/form-data 类型的表单数据,主要用于文件上传。如果你在使用 Multer 时遇到 req.file
始终未定义的问题,可能是以下几个原因造成的:
enctype="multipart/form-data"
属性。<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="avatar">
<input type="submit">
</form>
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, Date.now() + '-' + file.originalname);
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('avatar'), (req, res) => {
if (!req.file) {
return res.status(400).send('No file uploaded.');
}
res.send('File uploaded successfully.');
});
确保前端上传文件时使用的字段名(如 avatar
)与后端 Multer 配置中的字段名一致。
以下是一个完整的示例,展示了如何使用 Multer 处理文件上传:
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname));
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('avatar'), (req, res) => {
if (!req.file) {
return res.status(400).send('No file uploaded.');
}
res.send('File uploaded successfully.');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过以上步骤,你应该能够解决 req.file
未定义的问题。如果问题仍然存在,请检查控制台和网络请求,查看是否有其他错误信息。
领取专属 10元无门槛券
手把手带您无忧上云