如何将缓冲区图像上传到 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 - 如何将缓冲区二进制文件转换为图像?

如何将图像上传到 cloudinary

如何将图像从 android 上传到 Cloudinary?

Nuxt.js - 如何将图像上传到 cloudinary?

如何使用流明通过android将图像文件上传到cloudinary

如何使用自定义 url 和文件夹将图像上传到 cloudinary