【发布时间】:2020-05-30 07:37:35
【问题描述】:
如何使用缓冲区作为图像上传到 Cloudinary。在使用 Sharp 的缓冲区中,我指定它是 jpeg。我不想将它保存在服务器中,所以我正在处理图像,并通过 req 对象发送它
exports.resizeUserPhoto = async (req, res, next) => {
if (!req.file) return next();
req.file.filename = `user-${req.user.id}-${Date.now()}.jpeg`;
const processedImage = await sharp(req.file.buffer)
.resize(150, 150)
.toFormat("jpeg")
.jpeg({ quality: 90 })
.toBuffer();
//saving the buffer to a new file object
req.file.processedImage = processedImage;
next();
};
exports.updateMe = catchAsync(async (req, res, next) => {
if (req.file) {
console.log(req.file.processedImage); //returns <Buffer ....... >
const result = await cloudinary.uploader.upload(req.file.processedImage, {
use_filename: true,
folder: `${req.user.id}/profile/`
});
filteredBody.photo = result.url;
}
}
*** 更新: 后来我发现它也可以使用 DataUri 来完成,但不知何故在论坛上读到它会减慢服务器的速度……我不知道它是否属实。
另外,我的大部分问题都出在这个方法上:cloudinary.uploader.upload_stream。它说它返回一个承诺,这是不正确的。
我在 Cloudinary 的论坛上问了这个问题。我会在这里发布答案。
【问题讨论】:
标签: node.js cloudinary