Javascript Node.js如何从MS Sql server数据类型的varbinary转换为图像
我正在访问第三方数据库,其中有存储在varbinary列中的图像。我正在编写node.js应用程序,以将MS Sql server中存储的varbinary映像恢复到.jpg文件中 当我查询varbinary时,它作为缓冲区返回,但从缓冲区返回时,我无法将图像恢复到.jpg文件中 对于MS Sql server访问,我使用的是Library [更新::以下是我尝试转换和另存为图像的一些方法Javascript Node.js如何从MS Sql server数据类型的varbinary转换为图像,javascript,sql-server,node.js,binary,buffer,Javascript,Sql Server,Node.js,Binary,Buffer,我正在访问第三方数据库,其中有存储在varbinary列中的图像。我正在编写node.js应用程序,以将MS Sql server中存储的varbinary映像恢复到.jpg文件中 当我查询varbinary时,它作为缓冲区返回,但从缓冲区返回时,我无法将图像恢复到.jpg文件中 对于MS Sql server访问,我使用的是Library [更新::以下是我尝试转换和另存为图像的一些方法 var decodedImage = new Buffer(varbinaryBufferReturedF
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 server中存储为十六进制数,表示base64编码字符串,数据类型为varbinary。获取record 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编码字符串的表示,需要遵循上述步骤)的工作方式不同 向我们展示您尝试使用的代码(最简单的完整版本),这样我们可以帮助您了解它的错误。更多:这可能对你有用@T.J.Crowder我已经更新了我到目前为止试图转换为图像的代码。音频文件(
audio/mpeg
)呢?这一切都取决于保存在DB中的数据格式。如果它是二进制的,采用base64编码格式,则应使用相同的主体。它还支持流式传输大数据集,这也会有所帮助