A Guide to File Upload in Node.js with Express and Multer

stack of books on white table

A Guide to File Upload in Node.js with Express and Multer

File upload functionality is essential for many web applications, whether you’re building a content management system, a social media platform, or an e-commerce site. In this blog post, we’ll explore how to implement file uploads using Node.js and Express, with the help of Multer middleware.

Setting Up the Project

Before we dive into the implementation, make sure you have Node.js and npm (Node Package Manager) installed on your machine.

  1. Initialize a new Node.js project:
   mkdir file-upload-example
   cd file-upload-example
   npm init -y
  1. Install Express and Multer:
   npm install express multer

Implementing File Upload with Multer

Multer is a middleware for handling multipart/form-data, which is primarily used for uploading files. Let’s create a basic file upload functionality using Multer with Express.

  1. Create an Express server (app.js):
   // app.js

   const express = require('express');
   const multer = require('multer');
   const path = require('path');
   const app = express();
   const PORT = process.env.PORT || 3000;

   // Set up multer storage and file naming
   const storage = multer.diskStorage({
     destination: function (req, file, cb) {
       cb(null, 'uploads/');  // Uploads folder where files will be stored
     filename: function (req, file, cb) {
       cb(null, Date.now() + path.extname(file.originalname));  // Unique filename

   // Initialize multer middleware
   const upload = multer({ storage: storage });

   // Serve static files from the 'public' directory

   // Route to handle file upload
   app.post('/upload', upload.single('file'), (req, res) => {
     if (!req.file) {
       return res.status(400).send('No files were uploaded.');

     res.send(`File ${req.file.filename} uploaded successfully.`);

   // Start server
   app.listen(PORT, () => {
     console.log(`Server is running on http://localhost:${PORT}`);
  1. Create a basic HTML form (public/index.html):
   <!-- public/index.html -->

   <!DOCTYPE html>
   <html lang="en">
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>File Upload Example</title>
     <h1>File Upload Example</h1>
     <form action="/upload" method="POST" enctype="multipart/form-data">
       <input type="file" name="file">
       <button type="submit">Upload</button>

How It Works

  • Express Setup: We set up an Express server and configure it to serve static files from the public directory where our HTML form resides.
  • Multer Configuration: Multer is configured with diskStorage to specify where uploaded files should be stored (uploads/ folder) and how to name the files (timestamp + original extension).
  • File Upload Route: A POST route /upload handles file uploads. It uses upload.single('file') middleware to process a single file upload with the input field name file. Upon successful upload, it responds with a success message containing the filename.


Implementing file uploads in Node.js with Express and Multer is straightforward yet powerful. By following this guide, you can quickly integrate file upload functionality into your Node.js applications. Remember to handle error cases and implement additional validation and security measures based on your specific requirements. File uploads are a common feature in web development, and understanding how to implement them effectively enhances the interactivity and functionality of your applications.

Also Read:

Leave a Reply

Your email address will not be published. Required fields are marked *

Share this article:

Follow by Email0

Also Read: