Node.js Как конвертировать в образ из varbinary типа данных сервера MS Sql

Я обращаюсь к сторонней базе данных, где есть изображения, хранящиеся в столбце varbinary. Я пишу приложение node.js для восстановления изображений varbinary, хранящихся на сервере MS Sql, в файл.jpg.

Когда я запрашиваю varbinary возвращается как буфер, но из буфера я не могу восстановить изображение в файл.jpg.

Для доступа к серверу MS Sql я использую https://www.npmjs.com/package/mssql libray.

[ОБНОВЛЕНИЕ:]: Ниже приведены некоторые способы, которые я пытался преобразовать и сохранить как изображение.

var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'base64');
var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'hex');
var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'uft8');
var decodedImage = varbinaryBufferReturedFromDatabase.toString('hex');
var decodedImage = varbinaryBufferReturedFromDatabase.toString('base64');
var decodedImage = varbinaryBufferReturedFromDatabase.toString('uft8');

fs.writeFile(__dirname+'/../public/images/img3.jpg', decodedImage, function(err, data){
            if (err) throw err;
        console.log('It\'s saved!');
            cb(data);
    });

1 ответ

Решено Было трудно, пока я не изучил, как работает кодирование / декодирование и varbinary.

Решение: Изображения сохранялись в виде шестнадцатеричных чисел, представляющих строку в кодировке base64, на сервере Sql как тип данных varbinary. При получении записи node.js библиотека mssql преобразует шестнадцатеричные числа в буфер javascript (этот буфер содержит строку в кодировке base64, а не фактическое изображение). Затем я преобразовал этот буфер обратно в закодированную base64 строку изображения, как..

var originalBase64ImageStr = new Buffer(resultSet[0].Image).toString('utf8');

Затем создал преобразованный обратно в реальный буфер изображения, как..

var decodedImage = new Buffer(originalBase64ImageStr , 'base64')

fs.writeFile(__dirname+'/../public/images/img3.jpg', decodedImage, function(err, data){
            if (err) throw err;
        console.log('It\'s saved!');
            cb(data);
    });

Примечание. Библиотека mdeql Node.js работает по-разному для строкового представления varbinary(возвращаемый буфер является представлением исходной строки, поэтому нет необходимости выполнять описанные выше шаги) и для представления изображения / документа varbinary(возвращаемый буфер является представлением строки в кодировке base64 и должен следовать вышеуказанные шаги).

Другие вопросы по тегам