Skip to content

How to download an image from URL in Node

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

I wrote 21 books to help you become a better developer:

  • HTML Handbook
  • Next.js Pages Router Handbook
  • Alpine.js Handbook
  • HTMX Handbook
  • TypeScript Handbook
  • React Handbook
  • SQL Handbook
  • Git Cheat Sheet
  • Laravel Handbook
  • Express Handbook
  • Swift Handbook
  • Go Handbook
  • PHP Handbook
  • Python Handbook
  • Linux Commands Handbook
  • C Handbook
  • JavaScript Handbook
  • Svelte Handbook
  • CSS Handbook
  • Node.js Handbook
  • Vue Handbook
...download them all now!

Related posts that talk about node: