我正在尝试使用 Multer 和 Express 进行图像上传。仅上传图像进展顺利,一切正常,问题是,我想发送的不仅仅是一张照片。让我解释。我得到了最基本的表格,不值得分享。然后,当提交带有 JUST 图像的表单时,axios 请求如下所示:
async onSubmit() {
const formData = new FormData();
formData.append('file', this.person.personData.file)
this.obj.file = formData
try {
await axios.post('/projects/new', this.obj.file);
this.message = 'Uploaded';
} catch (err) {
console.log(err);
this.message = 'Something went wrong'
}
},
Express 中接收图像的邮寄路线如下所示:
personRoutes.post('/new', upload.single('file'), (req, res) => {
console.log('BODY: ', req.body)
console.log('REQ.FILE: ', req.file)
const person = new Person({
personData: {
file: req.file.path
}
});
person.save()
.then(result => {
console.log('YES', result)
res.redirect('/projects')
})
.catch(err => {
console.log('KUT', err)
})
});
req.file 是
upload.single('file')
文件。 Req.body 将保存文本字段(如果有)。 Ez Pz,到目前为止一切顺利。现在,事情变得有点粗略了,如果我想上传不止一张照片怎么办?所以我的 obj
对象不仅拥有 file
属性,还拥有其他一些属性。目前我直接发送 formData 文件
await axios.post('/projects/new', this.obj.file);
但是如果我的
obj
包含的不仅仅是一个文件,我将不得不这样做:
await axios.post('/projects/new', this.obj);
但是我的特快专递路线到底应该是什么样子呢?因为
req.file
现在(据我所知)将永远是 undefined
,因为 file
没有在 req
对象内定义。它在 req.body
对象中定义。以 req.obj.file
身份访问文件不会执行任何操作。任何帮助将非常感激。我什至不知道这是否可能。如果没有,我还有什么其他选择?
提前致谢!
upload.array('file')
应该可以。将收到任意数量的文件。
这是一个例子: 乘法器代码:
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads')
},
filename: (req, file, cb) => {
cb(null, "image"+Date.now()+file.originalname);
}
});
const fileFilter = (req,file,cb)=>{
if(file.mimetype==="image/jpeg" || file.mimetype==="image/png"){
cb(null, true);
}else{
cb(new Error("File type is not acceptable"),false);
}
}
const uploadImages = multer({storage:storage,
limits:{
fileSize: 1024*1024*10
},
fileFilter:fileFilter}).array("shopImage");
app.邮政编码:
app.post("/shop", function(req,res){
uploadImages(req,res,function(err){
if(err){
console.log(err);
res.status(400).json({message:err.message});
}else{
console.log(req.files);
console.log(req.body);
....
}
});
....
})
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
// req.files is array of `photos` files
// req.body will contain the text fields, if there were any
})
添加需要上传的照片数量。 upload.array('照片', 12) 12代表您需要上传多少张图片。