Преобразованное изображение base64 не работает, как я могу получить истинное изображение base64? - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь преобразовать полезную нагрузку моего запроса в base64, но результат моего кода не является допустимым изображением base64. Когда я пытаюсь использовать его в браузере, изображение не отображается.

Поэтому я пытаюсь написать простой код для преобразования изображения в base64 или с использованием модулей npm, но результат тот же, и я не получаю правильное изображение!

const request = require('request');

const url = "http://cdn1.giltcdn.com/images/share/uploads/0000/0001/7250/172502872/420x560.jpg";

request({url, gzip: true}, function (err, res, body) {

    if(!err){
        const data = "data:" + res.headers["content-type"] + ";base64," + Buffer.from(body, 'binary').toString('base64');
        console.log(data);
    }
});

или

server.get("/test", function(req, res){
    const data = "data:" + req.headers["content-type"] + ";base64," + Buffer.from(req.data.payload, 'binary').toString('base64');
    console.log(data);
});

Результат тот же (когда я копирую и вставляю в браузере, изображение не отображается):

данные: изображение / JPEG; base64, / F39 / QAQSkZJRgABAQAAAQABAAD9 / QBDAAEBA ...

Когда я использовал этот https://www.base64 -image.de / веб-сайт для преобразования в изображение base64, получился результат (когда я копировал и вставлял в браузер, он работал и отображал изображение):

данные: изображение / JPEG; base64, / 9J / 4AAQSkZJRgABAQAAAQABAAD / 2wBDAAEBA ...

Почему результаты отличаются и почему не работает буфер для base64?

1 Ответ

0 голосов
/ 03 ноября 2018

Похоже, вам нужно установить encoding: null в качестве опции для функции request, как объяснено в этого ответа . Это заставляет body быть возвращенным как двоичный файл вместо utf8, который является значением по умолчанию.

const request = require('request');

const url = "http://cdn1.giltcdn.com/images/share/uploads/0000/0001/7250/172502872/420x560.jpg";

request({url, gzip: true, encoding: null}, function (err, res, body) {
    if(!err) {
        const data = "data:" + res.headers["content-type"] + ";base64," + Buffer.from(body, 'binary').toString('base64');
        console.log(data);
    }
});
...