javascript - 上传图片到cloudinary,不生成本地文件

标签 javascript node.js express cloudinary

我正在使用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 上存储图像(如果不是这种情况,那么很高兴知道,并且会大大简化事情),所以我需要保存生成的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);

关于javascript - 上传图片到cloudinary,不生成本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56088979/

相关文章:

javascript - Bootstrap js崩溃不隐藏

javascript - 如何使用 jquery 转换图像?

javascript - 根据特定规则获取自定义数组列表的层级顺序

javascript - 安装 Spectron

node.js - CouchDB 响应失败的方式有哪些?

Node.js 文件/文件夹根据用户输入自动完成

json - compoundJS::如何创建模式来反射(reflect)半复杂的 JSON 对象?

javascript - 为什么在request.post之后修改request

node.js - express session存储在redis中用于匿名

node.js - 在 express 项目中使用 wallaby.js 时避免使用 EADDRINUSE