AI Workshop: learn to build apps with AI →
Tips: How to handle file uploads in Node.js

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


In how to upload a file using Fetch I explained how to upload a file to a server using Fetch.

In this post I’m going to show you part 2: how to use Node.js, and in particular Express, to handle uploaded files.

Install the express-fileupload npm package:

npm install express-fileupload

and add it to your middleware:

import fileupload from 'express-fileupload'

//or

const fileupload = require('express-fileupload')

After you create your Express app, add:

app.use(
  fileupload(),
  //...

This is needed because otherwise the server can’t parse file uploads.

Now uploaded files are provided in req.files. If you forget to add that middleware, req.files would be undefined.

app.post('/saveImage', (req, res) => {
  const image = req.files.myFile
  const path = __dirname + '/images/' + image.name


  image.mv(path, (error) => {
    if (error) {
      console.error(error)
      res.writeHead(500, {
        'Content-Type': 'application/json'
      })
      res.end(JSON.stringify({ status: 'error', message: error }))
      return
    }

    res.writeHead(200, {
      'Content-Type': 'application/json'
    })
    res.end(JSON.stringify({ status: 'success', path: '/images/' + image.name }))
  })
})

This is the smallest amount of code needed to handle files.

We call the mv property of the uploaded image. That is provided to us by the express-fileupload module. We move it to path and then we communicate the success (or an error!) back to the client.

Lessons in this unit:

0: Introduction
1: Axios crashes the Node.js process when the request fails
2: How to set up a cron job that runs a Node.js app
3: How to get both parsed body and raw body in Express
4: Interact with the Google Analytics API using Node.js
5: How to bulk convert file names using Node.js
6: How to deep copy JavaScript objects using structuredClone
7: ▶︎ How to handle file uploads in Node.js
8: How to send an email using nodemailer
9: Logging all the requests coming through an Express app
10: How to upload an image to S3 using Node.js
11: How to read a CSV file with Node.js
12: How to set the current working directory of a Node.js program
13: How to upload files to S3 from Node.js
14: How to write a CSV file with Node.js
15: Where to host a Node.js app
16: Parsing JSON with Node.js
17: nodemailer, how to embed an image into an email
18: The Pug Guide
19: Restarting a Node process without file changes
20: How to use Sequelize to interact with PostgreSQL