如何使用 Nodejs 上传带有 json 的图像
Posted
技术标签:
【中文标题】如何使用 Nodejs 上传带有 json 的图像【英文标题】:How to upload Image with json using Nodejs 【发布时间】:2022-01-13 07:48:45 【问题描述】:我正在尝试上传带有 json 数据主体的图像。我已经看到如何在邮递员中执行请求,但是在我的终端中,我在控制台记录 req.body 时得到以下信息
[Object: null prototype] '': '"product": "pokemon"'
当记录 req.body.product 时返回未定义
图片上传成功,创建了新产品,但是没有json数据。 当仅发送带有正文而没有图像的请求时,它也可以正常工作。 我怎样才能让它们一起工作?
这是我的代码:
export const addNewProduct = async (req, res, next) =>
const userId = req.params.userId;
const user = await User.findById(userId);
if (!user)
return next(createError(404, "User with id"+ $userId +"not found"));
try
let result;
if (req.file !== undefined && req.file.path !== undefined)
result = await cloudinary.v2.uploader.upload(req.file.path,
folder: `capstone/products/$userId`,
);
console.log(req.body);
const newProductData =
// product: req.body.product,
// amount: req.body?.amount || "",
// untis: req.body?.units || "",
// price: req.body?.price || "",
...req.body,
businessId: userId,
image:
result?.url ||
req.body?.image ||
"https://via.placeholder.com/300/09f/fff.png",
cloudinary_id: result?.public_id || "",
;
const newProduct = new Product(newProductData);
const createdProduct = await newProduct.save();
res.status(200).send(createdProduct);
catch (error)
if (error.name === "ValidationError")
next(createError(400, error));
else
next(createError(500, error));
;
我想使用与创建新“产品”相同的端点,并希望在创建时选择上传带有其详细信息的图像。然后将来自 Cloudinary 的 URL 存储在产品中。
json 示例:
"产品": "玩具", “价格”:“1.99”, “金额”:“1”, “状态”:“高” 只有产品是模型中的必需字符串。 *做一个中间件检查,看看它是否是唯一的。
在邮递员中,我确实使用了 auto、application/json、multipart/form-data 等。我还分别在密钥对中添加了“data”或“json”
Postman on auto content tyoe
example of postman with content type added
【问题讨论】:
什么json数据? "product": "toy", "price": "1.99", "amount": "1", "status": "high" json 正文示例。我用有问题的图片更新了它 - 邮递员。 application/json 是一种基于文本的格式。它不能用于发送二进制文件。 multipart/form-data 是文件上传的正确类型,但是由于所有数据都标记为二进制,因此您会在请求处理程序上丢失自动 json 转换。您需要手动提取有效负载的 json 部分和JSON.parse()
。如果您使用的是 express,则它是 ***.com/questions/40076807/… 的副本
【参考方案1】:
我已经设法通过以下方式解决了这个问题: POSTMAN solution
在前端,我必须附加所有对象,而不仅仅是发送图像时的图像。因此都在formdata下。和一个没有附加图像文件的 if 语句,将其作为普通 JSON 发送。感谢大家的意见——一路上学到了很多东西。
【讨论】:
以上是关于如何使用 Nodejs 上传带有 json 的图像的主要内容,如果未能解决你的问题,请参考以下文章
在 NodeJS/Express 中将带有其他键值参数的图像上传到 postman
如何在nodejs中使用sharp调整图像大小然后使用multer上传
如何在nodejs中使用sharp调整图像大小然后使用multer上传
我应该如何批量上传到 s3 并通过最终回调从 nodeJS 网络服务器插入到 MongoDB?