Javascript NodeJS-如何从blob下载?

Javascript NodeJS-如何从blob下载?,javascript,node.js,express,node-oracledb,Javascript,Node.js,Express,Node Oracledb,如何使用NodeJS从BLOB列返回文件 我正在使用oracledb库来处理数据库操作,我有以下代码: async function getFile(req, res) { let filename = req.params.filename; let file = await selectFileFromDb(filename); file = file.rows[0][0]; //Column that contains the blob content //I

如何使用NodeJS从BLOB列返回文件

我正在使用
oracledb
库来处理数据库操作,我有以下代码:

async function getFile(req, res) {

   let filename = req.params.filename;
   let file = await selectFileFromDb(filename);
   file = file.rows[0][0]; //Column that contains the blob content

   //I would like to return something like this
   res.download(file);

}
我应该如何从列中读取BLOB内容并作为下载返回给请求者


谢谢。

您必须将内容头作为您必须下载的文件类型发送,然后在正文中发送缓冲区(因为您从数据库获得的是缓冲区)。最后在发送代码后结束响应。下面是一个示例代码

async function getFile(req, res) {

   let filename = req.params.filename;
   let file = await selectFileFromDb(filename);
   file = file.rows[0][0]; //Column that contains the blob content

   res.setHeader('Content-Length', file.length);
   res.write(file, 'binary');
   res.end();

}
如何将BLOB内容作为缓冲区获取

不要忘记设置oracledb.fetchAsBuffer的
属性:

const oracledb = require('oracledb');
oracledb.fetchAsBuffer = [oracledb.BLOB];

您必须将content header作为您必须下载的文件类型发送,然后在正文中发送缓冲区(从db获得的是缓冲区)。最后在发送代码后结束响应。下面是一个示例代码

async function getFile(req, res) {

   let filename = req.params.filename;
   let file = await selectFileFromDb(filename);
   file = file.rows[0][0]; //Column that contains the blob content

   res.setHeader('Content-Length', file.length);
   res.write(file, 'binary');
   res.end();

}
如何将BLOB内容作为缓冲区获取

不要忘记设置oracledb.fetchAsBuffer的
属性:

const oracledb = require('oracledb');
oracledb.fetchAsBuffer = [oracledb.BLOB];

六羟甲基三聚氰胺六甲醚。。。从select获取的我的“file”变量是一个对象。如何将其转换为缓冲区?我在文档中找不到任何内容。您可以使用Buffer.from将字符串(文件内容)转换为缓冲区。缓冲区也是一个对象。当您对缓冲区进行控制台日志记录时,您将看到如下内容。资料来源:-我知道了。在调用oracledb.getConnection(dbConfig)之前,我设置了oracledb.fetchAsBuffer=[oracledb.BLOB]选项;六羟甲基三聚氰胺六甲醚。。。从select获取的我的“file”变量是一个对象。如何将其转换为缓冲区?我在文档中找不到任何内容。您可以使用Buffer.from将字符串(文件内容)转换为缓冲区。缓冲区也是一个对象。当您对缓冲区进行控制台日志记录时,您将看到如下内容。资料来源:-我知道了。在调用oracledb.getConnection(dbConfig)之前,我设置了oracledb.fetchAsBuffer=[oracledb.BLOB]选项;作为参考,节点oracledb LOB文档在此处,节点oracledb项目目录中有示例供参考,节点oracledb LOB文档在此处,节点oracledb项目目录中有示例供参考