javascript - Node.js 如何从 MS Sql 服务器数据类型的 varbinary 转换为图像

标签 javascript sql-server node.js binary buffer

我正在访问第三方数据库,其中 varbinary 列中存储有图像。我正在编写 Node.js 应用程序来将 MS Sql 服务器中存储的 varbinary 图像恢复到 .jpg 文件中。

当我查询 varbinary 作为缓冲区返回时,但从缓冲区中我无法将图像恢复到 .jpg 文件中。

对于 MS Sql 服务器访问,我正在使用 https://www.npmjs.com/package/mssql库。

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

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 的工作原理。

解决方案: 图像存储为 Sql 服务器中 Base64 编码字符串的十六进制数字表示形式,数据类型为 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);
    });

注意: Node.js mssql 库对于 varbinary 的字符串表示(返回的缓冲区是原始字符串的表示,因此不需要遵循上述步骤)和 varbinary 的图像/文档表示(返回的缓冲区)的工作方式不同是base64编码字符串的表示,需要遵循上述步骤)。

关于javascript - Node.js 如何从 MS Sql 服务器数据类型的 varbinary 转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41042527/

相关文章:

php - 通过一个字段和不同的值选择所有行

javascript - Mongo 返回完整数据,而 Mongoose 不返回相对数据

javascript - Mongoose 深度填充 [Object] 的第 2 级结果

javascript - 模板的 Angular-Route

javascript - 如何获取视频src属性

javascript - Express js - 在单独的文件中使用路由

sql-server - 选择最多一个空格的数据?

javascript - 使用 jQuery AJAX 调用防止 "race conditions"

javascript - Moment js UTC 日期比较

sql - 消息102,级别15,状态1行1 'n'附近的语法不正确