Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js如何从MS Sql server数据类型的varbinary转换为图像_Javascript_Sql Server_Node.js_Binary_Buffer - Fatal编程技术网

Javascript Node.js如何从MS Sql server数据类型的varbinary转换为图像

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

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

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

对于MS Sql server访问,我使用的是Library

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

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编码格式,则应使用相同的主体。它还支持流式传输大数据集,这也会有所帮助