AI Workshop: learn to build apps with AI →
Image Processing: How to download an image from URL in Node

Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.


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 downloadFileFromURL(response.headers.location, fileLocation)
        }

        // 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)

Lessons in this unit:

0: Introduction
1: How to create and save an image with Node.js and Canvas
2: ▶︎ How to download an image from URL in Node
3: How to download and save an image using Node.js
4: How to get an image width and height using Node
5: How to turn an image into a data URI string
6: How to download an image using Node.js
7: How to print a canvas to a data URL
8: Optimize images from a Node.js script
9: Calling the ImageOptim macOS app from a Node.js script