Сложность преобразования изображения в Base64 - PullRequest
0 голосов
/ 23 мая 2018

Я сталкиваюсь с очень запутанной проблемой при преобразовании изображения в строку base64 в Node.js

Вот мой пример кода:

app.get('/image', (req, res) => {
  ServerAPI.queryViewImage(options).then(image => {
    res.render('image', { image: Buffer.from(image, 'binary').toString('base64') });
  });
});

Так что в принципе, самое важноеэто блок, в котором я конвертирую свой ответ на изображение в строку base64:

 { image: Buffer.from(image, 'binary').toString('base64') }

На самом деле, я протестировал мой API с почтальоном, и изображение было отображено правильно.Затем я преобразовал изображение в base64 с помощью онлайн-конвертера и включил код в мой html / img src, который работал.

Затем я сравнил код base64, сгенерированный Node.js, и онлайн-конвертер из того же вызова API -очевидно, есть различия.Снимок экрана ниже:

различия между ответом Node.js на base64 и изображением на base64

Чего мне не хватает?Почему Node.js неправильно преобразовывает ответ моего изображения?

// РЕДАКТИРОВАТЬ: Включая код функции queryViewImage.

//basically, this function connects to server and returns image response as promise. rp() is from request-promise library
const queryViewImage = (token, siteId, viewId) => {
    const options = {
        method: 'GET',
        url: `${url('sites')}/${siteId}/views/${viewId}/image`,
        headers: {
            'X-Tableau-Auth': token
        }
    };

    return rp(options)
        .then((response) => response)
        .catch((err) => err);
}

1 Ответ

0 голосов
/ 23 мая 2018

Я нашел решение.Надеюсь, кто-то будет использовать это в будущем.

Итак, библиотека запроса-обещания имеет некоторую кодировку по умолчанию.Чтобы удалить его, я добавил свойство 'encoding' к объекту параметров и установил для него значение null.Как показано ниже

    const options = {
        method: 'GET',
        url: `${url('sites')}/${siteId}/views/${viewId}/image`,
        headers: {
            'X-Tableau-Auth': token
        },
        encoding: null
    };
...