Search code examples
javascriptnode.jsexpressnode-oracledb

NodeJS - How to download from a blob?


How can I return a file from a BLOB column using NodeJS?

I'm using the oracledb library to handle the database operations and I have the following code:

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);

}

What should I do to read the BLOB content from the column and return as a download to the requester?

Thank you.


Solution

  • You have to send content header as the type of file that you have to download and then send the buffer (asuming what you got from the db is a buffer ) in the body . Finally end the response after sending the code. Here is a sample code .

    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();
    
    }
    

    HOW TO GET THE BLOB CONTENT AS A BUFFER

    Do not forget to set the oracledb.fetchAsBuffer property:

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