【问题标题】:How to upload buffer image to cloudinary?如何将缓冲区图像上传到 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);
  }
});

如何解决这个问题?

【问题讨论】:

  • 嘿,你修好了吗?

标签: node.js multer cloudinary


【解决方案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 找到了这篇有用的帖子。干杯

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 2014-10-26
    • 2018-03-15
    • 2021-02-04
    • 2021-03-08
    • 2021-03-20
    • 2017-08-04
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多