Thuan Thien
Thuan Thien

Reputation: 37

Nodejs - Fetch file from url and send content to client

For some reason, I don't want to share the URL public (sercet url),

My workflow is as below:

Client send API request to my server:

Api: mywebsite.com/api/image_abc.jpg

I have Nodejs express server to fetch the file from the url:

Eg: sercret_url.com/image_abc.jpg

And then from response image content from Nodejs, I send back the image content to the client and display as image_abc.jpg

I looked around on stackoverflow, but just got an answer from reading file from disk and send to client. What I want is just redirect the image content to client, not saving file to the disk.

Thank you.

Upvotes: 1

Views: 4208

Answers (1)

nermineslimane
nermineslimane

Reputation: 616

Assuming you want to return the contents of a file from a certain URL to the client as buffer here's the solution I suggest

Get the file using axios and return the buffer to you client

  const axios = require('axios');
  let URL='some-valid-url'
  const response = await axios.get(
    URL,
    { responseType: 'arraybuffer' }
  );
  const buffer = Buffer.from(response.data, 'utf-8');
  res.status(200).send(buffer);

In case you want to save it to your server you can use fs as follows to write the file to the folder of your choice

  fs.writeFile(fileName, buffer, (err) => {
      if(!err) console.log('Data written');
    });

Upvotes: 6

Related Questions