如何将缓冲区图像上传到 cloudinary?
Posted
技术标签:
【中文标题】如何将缓冲区图像上传到 cloudinary?【英文标题】:How to upload buffer image to cloudinary? 【发布时间】:2020-10-18 22:50:55 【问题描述】:我想将一组图像上传到 cloudinary。我已经设法用 multer 解析文件,将它们作为缓冲区返回。在阅读了文档和 github 问题之后,似乎将缓冲区转换为数据 uri 是一个性能杀手。所以我使用了 cloudinary 的流上传器,但它不起作用。
UnhandledPromiseRejectionWarning: TypeError: size.split is not a function or its return value is not iterable
这是我的代码:
// multer config
const storage = multer.memoryStorage();
const limits = fileSize: 1000 * 1000 * 4 ; // limit to 4mb
const upload = multer( storage, limits );
cloudinary.config(
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
);
// upload image
router.post("/upload-images", upload.array("image"), (files, res) =>
try
if (files)
const imagesUploaded = [];
files.forEach(async (file, i) =>
const image = await cloudinary.uploader
.upload_stream(file,
resource_type: "image",
public_id: `app/users/$userId/img$i`,
crop: "scale",
quality: "auto",
)
.end(file.buffer);
return imagesUploaded.push(image.secure_url);
);
console.log("imagesUpdated", imagesUploaded);
// upload images url to the db
catch (err)
return res.json(err);
);
如何解决这个问题?
【问题讨论】:
嘿,你修好了吗? 【参考方案1】:我也遇到了同样的问题,经过一番研究后,我发现这个解决方案也对你有用,我猜。
router.post('/upload', multerUploads, async (req, res) =>
try
//console.log(req.file)
// if (!req.files || Object.keys(req.files).length === 0)
// return res.status(400).send('No files were uploaded.');
// ;
// const file = req.files.file;
// if (file.size > 1024*1024)
// return res.status(400).json( msg: "Size is too large" );
//
// if (file.mimetype !== 'image/jpeg' && file.mimetype !== 'image/png')
// return res.status(400).json( msg: "File format is incorrect." );
//
//console.log(req.file)
if(req.file)
let cld_upload_stream = cloudinary.uploader.upload_stream(folder: "test", function (error, result)
console.log(error, result);
res.json( public_id: result.public_id, url: result.secure_url );
);
streamifier.createReadStream(req.file.buffer).pipe(cld_upload_stream);
catch (err)
res.status(500).json( msg: err.message )
);
作为参考,我从 cloudinary 团队 cloudinary support topic node upload 找到了这篇有用的帖子。干杯
【讨论】:
以上是关于如何将缓冲区图像上传到 cloudinary?的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB & Multer - 如何将缓冲区二进制文件转换为图像?
如何将图像从 android 上传到 Cloudinary?
Nuxt.js - 如何将图像上传到 cloudinary?