Конвертировать URL изображения в base 64 без холста или XMLHttpRequest в узле - PullRequest
0 голосов
/ 11 ноября 2019

Я нахожусь в ситуации с slackbot, поэтому я не могу использовать Canvas / XMLHttpRequest, просто простое request Я вдохновился этим гистом: https://gist.github.com/oliyh/db3d1a582aefe6d8fee9

Пока у меня есть это:

function toDataURL(url) {
  request(url, function (error, response, body) {
    var b64 = Base64.encode(response);
    console.log(b64)
    return b64;
  });
}

и я называю это так:

Buffer.from(toDataURL(`http://cos-work-spot/files/${ppl.image}`))

но я продолжаю получать это

 TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.
     at Function.Buffer.from (buffer.js:183:11)
     at MergeMapSubscriber.getLdapUserBySlackId.concatMap [as project] (/mnt/space/root/workspace/ul- 
     butler-george/src/index.js:213:37)
     at <anonymous>
     at process._tickCallback (internal/process/next_tick.js:189:7)

Прежде чем пометить это как дубликат, помните, что я могу 'т Canvas / XMLHttpRequest!

1 Ответ

0 голосов
/ 11 ноября 2019

Вы можете указать кодировку null , чтобы запрос возвращал объект Buffer. Как только у нас будет буфер изображения, мы получим строку base64 с использованием .toString ('base64');

Я использую библиотеку запроса-обещания-нативную, чтобы позволить мне использовать подход, основанный на обещании (который яповерьте немного легче читать):

const rp = require('request-promise-native');

async function imageUrlToBase64(url) {
    const options = { url, encoding: null } // We specify a null encoding to return a buffer.
    let result = await rp(options); // Download the image buffer
    return result.toString('base64'); // Encode the buffer as a base64 string.
};

async function testUrlToBase64(url) {
    const base64 = await imageUrlToBase64(url);
    console.log("Base64 length:", base64.length);
    console.log("Base64 (first 100):", base64.substring(0,100));
}

// Image url.
const url = "https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Hubble2005-01-barred-spiral-galaxy-NGC1300.jpg/1920px-Hubble2005-01-barred-spiral-galaxy-NGC1300.jpg"

testUrlToBase64(url);
...