Skip to content

How to download an image from URL in Node

New Courses Coming Soon

Join the waiting lists

import os from 'os'
import fs from 'fs'
import https from 'https'

async function downloadFileFromURL(url, fileLocation) {
  return await new Promise((resolve, reject) => {
    https
      .get(url, (response) => {
        const code = response.statusCode ?? 0

        if (code >= 400) {
          return reject(new Error(response.statusMessage))
        }

        // handle redirects
        if (code > 300 && code < 400 && !!response.headers.location) {
          return await downloadFile(response.headers.location)
        }

        // save the file to disk
        const fileWriter = fs
          .createWriteStream(fileLocation)
          .on('finish', () => {
            resolve({
              fileLocation,
              contentType: response.headers['content-type'],
            })
          })

        response.pipe(fileWriter)
      })
      .on('error', (error) => {
        reject(error)
      })
  })
}

const imageUrl = 'https://.... bla bla'
const fileLocation = os.tmpdir() + '/' + rnd(10, rnd.alphaLower)

await downloadFileFromURL(imageUrl, fileLocation)
→ Get my Node.js Handbook
→ Read my Node.js Tutorial on The Valley of Code

Here is how can I help you: