在图像上传期间,我想向请求的正文中添加一个附加字段,以便后端知道是否允许gif文件类型。但是,作为POST请求的正文发送的params对象需要转换为Formdata才能上载图像。问题是,当请求命中API时,req.body中只有我的一个文本字段。转换后,我正在尝试检查FormData,但它在控制台中仅显示为FormData {}。它在其他地方说,您可以使用FormData.values()方法检查FormData中的值,但这仅在控制台中显示为Iterator。因此,我不知道问题出在从对象到formData的转换点(我怀疑)还是在到达API之前。
注意:我正在使用object-to-formdata软件包。
我的表单生成的对象看起来像这样:
{
name: "name",
cookingInstructions: [{ step: 1, text: "blah blah" },],
image: File,
imageUrl: 'http://a.url.com',
yield: 1,
}
我想添加一个字段以指示是否允许使用gif,所以我的帮助函数如下所示:
export function addRecipe(params) {
if (params.image && !params.imageUrl) {
const modifiedParams = params;
modifiedParams.query = { gif: false };
modifiedParams.gif = false;
const paramsImage = serialize(modifiedParams);
return apiCall('post', '/users/upload', paramsImage).then(result => {
params.imageUrl = result.file;
return apiCall('post', `/recipe`, params);
});
}
return apiCall('post', `/recipe`, params);
}
这是后端的图片上传中间件:
const fileFilter = (req, file, cb) => {
console.log(req.query); // {}
console.log(req.body); // [Object: null prototype] { yield: '1' }
console.log(req.body.gif); // undefined
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png' || file.mimetype === 'image/gif') {
cb(null, true);
} else {
cb(new Error('Invalid file type, only JPEG, PNG, and GIF are allowed!'), false);
}
};
正如您在上面的评论中看到的那样,唯一通过的字段似乎是yield,但是不清楚原因。我们在这里转换为FormData的方式有问题吗? const upload = multer({ fileFilter, 储存:multerS3({ acl:“公开阅读”, s3, 值区:process.env.AWS_BUCKET || “营养学”, 密钥(要求,文件,cb){ cb(null,Date.now()。toString()); }, }), });