gpt4 book ai didi

node.js - 如何将图像缓冲区转换为照片以上传到 Cloudinary?

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:16 24 4
gpt4 key购买 nike

如何使用缓冲区将图像作为图像上传到 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。它说它返回一个 promise ,但这不是真的。

我在 Cloudinary 的论坛中提出了这个问题。我将在这里发布答案。

最佳答案

exports.updateMe = catchAsync((req, res, next) => {
return new Promise((resolve, reject) => {
if (req.file) {
// console.log(req.file.processedImage.toString('base64'));
cloudinary.v2.uploader.upload_stream({ resource_type: 'raw' }, (err, res) => {
if (err) {
console.log(err);
reject(err);
} else {
console.log(`Upload succeed: ${res}`);
// filteredBody.photo = result.url;
resolve(res);
}
}).end(req.file.processedImage);
}
})
}

关于node.js - 如何将图像缓冲区转换为照片以上传到 Cloudinary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60227421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com