【问题标题】:Upload image to cloudinary without generating local file将图像上传到 cloudinary 而不生成本地文件
【发布时间】:2019-09-29 00:50:01
【问题描述】:

我正在使用jdenticon 在 node/express 应用程序中注册时生成用户头像。

在本地运行,我可以这样做:

  1. 使用jdenticon 生成标识
  2. 在本地保存文件
  3. 上传本地文件到cloudinary

我是这样做的

const cloudinary = require("cloudinary");
cloudinary.config({
    cloud_name: 'my-account-name',
    api_key: process.env.CLOUDINARY_API,
    api_secret: process.env.CLOUDINARY_SECRET
});

// 1. Generate identicon

let jdenticon = require("jdenticon"),
    fs = require("fs"),
    size = 600,
    value = String(newUser.username),
    svg = jdenticon.toPng(value, size);
let file = "uploads/" + value + ".png";

// 2. Save file locally

fs.writeFileSync(file, svg);

// 3. Upload local file to cloudinary

let avatar = await cloudinary.v2.uploader.upload(file);

// Do stuff with avatar object

这非常适合在本地运行我的应用程序。但是,据我了解,我无法在 Heroku 上存储图像(如果不是这种情况,那就太好了,并且会大大简化事情),所以我需要保存将生成的标识直接发送到 cloudinary。

如何将生成的图片 (svg = jdenticon.toPng(value, size);) 直接上传到 cloudinary,无需先保存?

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript node.js express cloudinary


    【解决方案1】:

    jdenticon.toPng 返回一个缓冲区,我相信。而 cloudinary 的 upload_stream 方法接受一个缓冲区,所以你应该可以这样做......

    const data = jdenticon.toPng(value, size);
    const options = {}; // optional
    
    cloudinary.v2.uploader.upload_stream(options, (error, result) => {
      if (error) {
        throw error;
      }
      console.log('saved .....');
      console.log(result);
    }).end(data);
    

    【讨论】:

    • 谢谢。我将在接下来的几天内对此进行测试。
    猜你喜欢
    • 2021-03-20
    • 2015-02-21
    • 2017-07-12
    • 2014-11-25
    • 1970-01-01
    • 2018-03-15
    • 2017-12-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多