作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在访问第三方数据库,其中 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/
我是一名优秀的程序员,十分优秀!