我无法弄清楚如何使用req.body.fname作为文件名, 甚至尝试使用中间件,但req.body为空。
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, path);
},
filename: function (req, file, cb) {
cb(null, req.body.fname) // undefined
}
})
var upload = multer({ storage: storage })
app.get('/upload', upload.single('fname'), (req,res)=>{
.......
})
i m unable to figure out how to fetch fname in fileName
index.html
<form action="/upload" method="POST" enctype= "multipart/form-data">
<input type="text" name="fname">
<input type="file" name="pic">
<input type = "submit">
</form>
答案 0 :(得分:2)
这不是一种优雅的方法,但是总比没有好。
app.post('/upload', (req, res) => {
upload(req, res, function (err) {
console.log(req.body.fname) // Here it works
});
});
const fs = require('fs');
然后,我们返回上载过程。
app.post('/upload', (req, res) => {
upload(req, res, function (err) {
fs.renameSync(req.files.path, req.files.path.replace('undefined', req.body.fname));
// This get the file and replace "undefined" with the req.body field.
});
});
我假设您的文件路径没有名为“ undefined”的文件夹。在这种不太可能的情况下,只需用Multer为文件命名,然后再用fs.renameSync替换。
const path = require('path');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, path);
},
filename: function (req, file, cb) {
cb(null, req.body.fname + path.extname(file.originalname))
}
})
或者在极少数情况下需要“ .undefined”扩展名,只需稍后在fs重命名过程中附加该扩展名即可。
希望这可以解决您的问题。祝您编程愉快!