Загрузить изображение в облачное хранилище без создания локального файла - PullRequest
0 голосов
/ 11 мая 2019

Я использую jdenticon для создания пользовательских аватаров при регистрации в приложении узла / экспресса.

Работая локально, я могу сделать это:

  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 (если это не так, то было бы полезно узнать об этом и значительно упростить ситуацию), поэтому мне нужно будет сохранить сгенерированный тождество напрямую в облачный.

Как я могу загрузить сгенерированное изображение (svg = jdenticon.toPng(value, size);) напрямую в облачную систему без предварительного сохранения?

Любая помощь будет оценена!

1 Ответ

1 голос
/ 11 мая 2019

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...