我正在使用jdenticon在节点/快速应用中的注册时生成用户头像。
在本地运行,我可以通过以下方式实现:
这是我的方法
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中?
任何帮助将不胜感激!
答案 0 :(得分: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);