Node.js如何从MS Sql server数据类型的varbinary转换为图像 [英] Node.js How to convert to image from varbinary of MS Sql server datatype

查看:196
本文介绍了Node.js如何从MS Sql server数据类型的varbinary转换为图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在访问存储在varbinary列中的图像的第三方数据库。我正在编写node.js应用程序来将存储在MS Sql server中的varbinary图像恢复为.jpg文件。

I am accessing third party database where there are images stored in varbinary column. I am writing node.js application to restore varbinary images stored in MS Sql server into .jpg file.

当我查询varbinary作为缓冲区返回但是从缓冲区我不是能够将图像恢复为.jpg文件。

When I query varbinary is returned as buffer but from buffer I am not able to restore image into .jpg file.

对于MS Sql server访问我正在使用 https://www.npmjs.com/package/mssql libray。

For MS Sql server access i am using https://www.npmjs.com/package/mssql libray.

[更新:] :以下是我尝试转换并保存为图像的一些方法。

[UPDATE:]: Below are the some of the ways I tried to convert and save as Image.

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);
    });


推荐答案

已解决很难直到我研究了编码/解码和varbinary如何工作。

Resolved It was difficult until I studied how Encoding/Decoding and varbinary works.

解决方案:
图像存储为十六进制数字表示base64编码的字符串在Sql server中作为数据类型varbinary。在获取记录node.js mssql库时,将十六进制数转换为javascript缓冲区(此缓冲区是base64编码的字符串而不是实际图像)。
然后我将此缓冲区转换回base64编码的图像字符串,如..

Solution : Images were stored as hexadecimal numbers representation of base64 encoded string in Sql server as data type varbinary. While fetching record node.js mssql library converts the hexadecimal numbers into javascript buffer(This buffer is of base64 encoded string and not actual image). Then I converted this buffer back to base64 encoded string of image like..

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

然后创建转换回实际图像缓冲区,如..

Then created converted back to actual image buffer like..

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);
    });

注意: Node.js mssql库对varbinary的字符串表示的工作方式不同(返回的缓冲区是原始字符串的表示,因此不需要按照上述步骤)和varbinary的image / doc表示(返回的缓冲区是base64编码字符串的表示,需要按照上述步骤操作)。

Note: Node.js mssql library works differently for string representation of varbinary(returned buffer is representation of original string so no need to follow above steps) and image/doc representation of varbinary(returned buffer is representation of base64 encoded string and need to follow above steps).

这篇关于Node.js如何从MS Sql server数据类型的varbinary转换为图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆