Skip to main content

Command Palette

Search for a command to run...

Handling File Uploads in Express with Multer

Updated
3 min read
Handling File Uploads in Express with Multer

In many web applications, users need to upload files such as images, documents, or videos. For example:

  • Uploading a profile picture

  • Sending documents

  • Sharing files

Handling file uploads in Node.js is not straightforward. This is why we use middleware like Multer.

1. Why File Uploads Need Middleware

When a user uploads a file, the data is sent in a special format called multipart/form-data.

This format is different from normal JSON data:

  • It contains files + text together

  • It is more complex to process

Node.js by default cannot handle this format easily.

So we use middleware like Multer to:

  • Read file data

  • Store files

  • Make files accessible in code


2. What is Multer?

Multer is a middleware for handling file uploads in Node.js and Express.

It helps to:

  • Process multipart/form-data

  • Save files to the server

  • Access uploaded files easily

Real-World Use Cases

  • Profile image upload

  • Resume upload

  • Product image upload (e-commerce)

  • Document sharing apps

Upload Lifecycle

Client selects file
          ↓ 
Form sends request (multipart/form-data) 
          ↓ 
Multer middleware processes file 
          ↓ 
File saved to storage 
          ↓ 
Server sends response

3. Basic Setup & Storage Configuration

Step1: Install Multer:

npm install multer

Step2: multer configuration

import multer from 'multer'

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "uploads/");
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + "-" + file.originalname);
  }
});

const upload = multer({ storage: storage });

This saves files inside the uploads folder.


4. Handling Single File Upload

app.post("/upload", upload.single("file"), (req, res) => {
  console.log(req.file);
  res.send("File uploaded successfully");
});

"file" is the name of the input field.


5. Handling Multiple File Uploads

app.post("/uploads", upload.array("files", 3), (req, res) => {
  console.log(req.files);
  res.send("Multiple files uploaded");
});

This allows uploading up to 3 files.

Important Points

  • Always use correct field name

  • Limit file size for safety

  • Validate file type (image, pdf, etc.)

  • Do not store sensitive files publicly


6. Serving Uploaded Files

To access uploaded files from browser:

app.use("/uploads", express.static("uploads"));

Now you can open files like:

http://localhost:3000/uploads/filename.jpg

Multer Middleware Flow

Request with file
      ↓
Multer middleware
      ↓ 
Processes file 
      ↓ 
Stores file 
      ↓ 
Adds file info to (req.file/req.files)
      ↓ 
Route handler executes

Simple Example

import express from 'express';
import multer from 'multer';

const app = express();

const upload = multer({ dest: "uploads/" });

app.post("/upload", upload.single("file"), (req, res) => {
  res.send("File uploaded");
});

app.listen(3000);

Conclusion

Multer makes file uploading easy in Node.js. It handles complex multipart data and allows developers to store and manage files efficiently.

Using Multer, It simplifies file uploads and helps to build powerful applications that handles user data smoothly.