Skip to content

How to download an image from URL in Node

FULL-STACK WEB DEVELOPMENT BOOTCAMP

2024 COHORT SIGNUPS END TOMORROW

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)
  • Learn modern web development in my BOOTCAMP (SIGNUP END TOMORROW FEB 20, 2024)
  • THE VALLEY OF CODE (+ PRO), your web development manual
  • I wrote 15+ coding BOOKS, all available in THE VALLEY OF CODE PRO
  • Indie solopreneur internet business masterclass SOLO LAB (summer 2024)