我正在访问第三方数据库,其中 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/