繁体   English   中英

将图像上传到cloudinary,而不生成本地文件

[英]Upload image to cloudinary without generating local file

我正在使用jdenticon在节点/快速应用程序中的注册时生成用户头像。

在本地运行,我可以通过以下方式实现:

  1. 使用jdenticon生成identicon
  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上 (如果不是这种情况,那将是个好消息,并且将大大简化事情),因此我将需要直接将生成的identicon保存到cloudinary。

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

任何帮助,将不胜感激!

我相信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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM