Reputation: 67
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?
Upvotes: 4
Views: 7182
Reputation: 46
As the fetch API in Node has now reached experimental support (default enabled) (Node 18) this can now be achieved without the help of an external library:
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 buffer = await response.arrayBuffer();
const base64 = Buffer.from(buffer).toString('base64');
console.log(data)
}
The difference here is that the response is not parsed to a blob but to an arrayBuffer. You may also want to use this approach because the response.buffer() method of node-fetch is depreciated
Upvotes: 2
Reputation: 1
Looking at node-fetch, it looks impossible to get at the Blob buffer, so, the best bet is to do the following
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);
};
Upvotes: 12