Search code examples
javascriptnode.jsimagebase64blob

How to convert FetchAPI parsed Blob Results to Base64


Have this module.exports file which fetches an image from an API endpoint. The API result is then parsed into a blob. After parsing the Blob object looks like this:

Blob {
  [Symbol(type)]: 'image/jpeg',
  [Symbol(buffer)]:
   <Buffer ff d8 ff db 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14
0d 0c 0b 0b 0c 19 12 13 0f 14 1d 1a 1f 1e 1d 1a 1c 1c 20 24 2e 27 20 22 2c 23 1c
 ... > }

And here's the code:

// Pre Configuration
const fetch = require('node-fetch')

module.exports = async (req, res, photoKey) => {
    let photoUrl = null
    const apiURL = "https://media.heartenly.com/stg/CACHE/sc_thumb"
    const requestURL = `${apiURL}/${photoKey}`
    const response = await fetch(requestURL)
    const data = await response.blob()
    console.log(data)
}      

Now what I want to do is to return base64 URL format of the returned blob, any ideas?


Solution

  • Looking at node-fetch, it looks impossible to get at the Blob buffer, so, the best bet is to do the following

    1. use response.buffer instead of response.blob
    2. use toString('base64') to get the data in base64

    in other words:

    const fetch = require('node-fetch');
    
    module.exports = async (req, res, photoKey) => {
        let photoUrl = null;
        const apiURL = "https://media.heartenly.com/stg/CACHE/sc_thumb";
        const requestURL = `${apiURL}/${photoKey}`;
        const response = await fetch(requestURL);
        const data = await response.buffer()
        const b64 = data.toString('base64');
        console.log(b64);
    };