Close Menu
Arunangshu Das Blog
  • Tools and Extensions
    • Automation Tools
    • Developer Tools
    • Website Tools
    • SEO Tools
  • Software Development
    • Frontend Development
    • Backend Development
    • DevOps
    • Adaptive Software Development
  • Cloud Computing
    • Cloud Cost & FinOps
    • AI & Cloud Innovation
    • Serverless & Edge
    • Cloud Security & Zero Trust
  • Industry Insights
    • Trends and News
    • Case Studies
    • Future Technology
  • Tech for Business
    • Business Automation
    • Revenue Growth
    • SaaS Solutions
    • Product Strategy
    • Cybersecurity Essentials
  • AI
    • Machine Learning
    • Deep Learning
    • NLP
    • LLM
  • Expert Interviews
    • Software Developer Interview Questions
    • Devops Interview Questions
    • AI Interview Questions

Subscribe to Updates

Subscribe to our newsletter for updates, insights, tips, and exclusive content!

What's Hot

What is caching, and how does it improve application performance?

November 4, 2024

Data Migration Strategies in Node.js: Moving Between MongoDB and Postgres Seamlessly

December 23, 2024

Serverless Computing vs. Traditional Cloud Hosting: A Deep Dive into the Future of Tech Infrastructure

February 26, 2025
X (Twitter) Instagram LinkedIn
Arunangshu Das Blog Saturday, May 10
  • Article
  • Contact Me
  • Newsletter
Facebook X (Twitter) Instagram LinkedIn RSS
Subscribe
  • Tools and Extensions
    • Automation Tools
    • Developer Tools
    • Website Tools
    • SEO Tools
  • Software Development
    • Frontend Development
    • Backend Development
    • DevOps
    • Adaptive Software Development
  • Cloud Computing
    • Cloud Cost & FinOps
    • AI & Cloud Innovation
    • Serverless & Edge
    • Cloud Security & Zero Trust
  • Industry Insights
    • Trends and News
    • Case Studies
    • Future Technology
  • Tech for Business
    • Business Automation
    • Revenue Growth
    • SaaS Solutions
    • Product Strategy
    • Cybersecurity Essentials
  • AI
    • Machine Learning
    • Deep Learning
    • NLP
    • LLM
  • Expert Interviews
    • Software Developer Interview Questions
    • Devops Interview Questions
    • AI Interview Questions
Arunangshu Das Blog
Home»Software Development»Backend Development»Handling File Uploads in Node.js with Multer
Backend Development

Handling File Uploads in Node.js with Multer

Arunangshu DasBy Arunangshu DasJuly 23, 2024Updated:February 26, 2025No Comments4 Mins Read

Uploading files is a common requirement in many web applications. Whether you’re building a profile picture uploader, a document management system, or a cloud storage service, you’ll need to handle file uploads efficiently and securely. In Node.js, one of the most popular libraries for handling file uploads is Multer.

What is Multer?

Multer is a middleware for handling multipart/form-data, which is primarily used for uploading files. It is written on top of the busboy library and makes it easy to handle file uploads in Node.js applications.

Setting Up Multer

Before we start, make sure you have Node.js and npm (Node Package Manager) installed on your machine. If not, you can download and install them from Node.js official website.

  1. Initialize Your ProjectFirst, create a new directory for your project and initialize a new Node.js project.
mkdir file-upload-example
cd file-upload-example
npm init -y

2. Install Dependencies

Next, install the necessary dependencies. We’ll need Express for our web server and Multer for handling file uploads.

npm install express multer

Create the Server

Create a new file named server.js and set up a basic Express server.

const express = require('express');
const multer = require('multer');
const path = require('path');

const app = express();

// Set up storage engine
const storage = multer.diskStorage({
  destination: './uploads/',
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
  }
});

// Initialize upload
const upload = multer({
  storage: storage,
  limits: { fileSize: 1000000 }, // Limit file size to 1MB
  fileFilter: function (req, file, cb) {
    checkFileType(file, cb);
  }
}).single('myImage');

// Check File Type
function checkFileType(file, cb) {
  // Allowed ext
  const filetypes = /jpeg|jpg|png|gif/;
  // Check ext
  const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
  // Check mime
  const mimetype = filetypes.test(file.mimetype);

  if (mimetype && extname) {
    return cb(null, true);
  } else {
    cb('Error: Images Only!');
  }
}

app.get('/', (req, res) => res.send('Hello World!'));

app.post('/upload', (req, res) => {
  upload(req, res, (err) => {
    if (err) {
      res.send(err);
    } else {
      if (req.file == undefined) {
        res.send('Error: No File Selected!');
      } else {
        res.send(`File Uploaded: ${req.file.filename}`);
      }
    }
  });
});

const PORT = process.env.PORT || 5000;

app.listen(PORT, () => console.log(`Server started on port ${PORT}`));

Understanding Multer Configuration

  1. Storage EngineThe storage engine determines how and where the files will be stored. In the above example, we’re using the diskStorage engine, which saves the files to the disk. We specify the destination directory and filename.
const storage = multer.diskStorage({
  destination: './uploads/',
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
  }
});

File Size Limit

You can set a file size limit to prevent users from uploading excessively large files.

limits: { fileSize: 1000000 } // Limit file size to 1MB

File Filter

The file filter allows you to control which files are accepted. In the example, we only accept image files (JPEG, JPG, PNG, GIF).

function checkFileType(file, cb) {
  const filetypes = /jpeg|jpg|png|gif/;
  const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
  const mimetype = filetypes.test(file.mimetype);

  if (mimetype && extname) {
    return cb(null, true);
  } else {
    cb('Error: Images Only!');
  }
}

Handling File Uploads in Routes

In the example, we set up a POST route /upload to handle the file uploads. The upload middleware is called in this route, which processes the file upload.

app.post('/upload', (req, res) => {
  upload(req, res, (err) => {
    if (err) {
      res.send(err);
    } else {
      if (req.file == undefined) {
        res.send('Error: No File Selected!');
      } else {
        res.send(`File Uploaded: ${req.file.filename}`);
      }
    }
  });
});

Security Considerations

When handling file uploads, it’s crucial to consider security to avoid potential vulnerabilities. Here are some tips:

  1. Validate File TypesAlways validate the file type to ensure that only the expected files are uploaded.
  2. Limit File SizeSet appropriate file size limits to prevent denial-of-service (DoS) attacks.
  3. Use Safe FilenamesEnsure that filenames are sanitized to prevent directory traversal attacks. Multer does this by default when generating filenames.
  4. Store Files SecurelyStore uploaded files in a secure directory and consider using unique filenames to avoid overwriting files.

Conclusion

Handling file uploads in Node.js is straightforward with Multer. It provides a simple yet powerful way to manage file uploads, with plenty of configuration options to meet your needs.

Backend Development File File Upload Node js

Related Posts

7 Common CORS Errors and How to Fix Them

February 26, 2025

The Significance of HTTP Methods in Modern APIs

February 25, 2025

7 Advantages of Using GraphQL Over REST

February 23, 2025
Leave A Reply Cancel Reply

Top Posts

Transfer Learning

May 9, 2024

Why Large Language Model is important?

June 25, 2021

5 Key Features of Google Lighthouse for Website Optimization

February 26, 2025

How does web browser rendering work?

January 1, 2025
Don't Miss

Transfer Learning

May 9, 20243 Mins Read

Introduction: In machine learning, It’s the technique that allows models to leverage knowledge gained while…

How NLP Works?

March 28, 2024

Top 20 Node.js Questions Every Developer Should Know

February 12, 2025

7 Types of Database Indexes Explained

February 22, 2025
Stay In Touch
  • Facebook
  • Twitter
  • Pinterest
  • Instagram
  • LinkedIn

Subscribe to Updates

Subscribe to our newsletter for updates, insights, and exclusive content every week!

About Us

I am Arunangshu Das, a Software Developer passionate about creating efficient, scalable applications. With expertise in various programming languages and frameworks, I enjoy solving complex problems, optimizing performance, and contributing to innovative projects that drive technological advancement.

Facebook X (Twitter) Instagram LinkedIn RSS
Don't Miss

How does authentication differ from authorization?

January 1, 2025

Cost-Effective Cloud Storage Solutions for Small Businesses: A Comprehensive Guide

February 26, 2025

What is the purpose of a deployment pipeline?

December 26, 2024
Most Popular

The Role of Continuous Learning in Adaptive Software Development

January 22, 2025

Continuous Testing with Jest in Node.js for DevOps Pipelines

January 31, 2025

How Deep Learning is Transforming Image Processing: Key Techniques and Breakthroughs.

November 9, 2024
Arunangshu Das Blog
  • About Me
  • Contact Me
  • Privacy Policy
  • Terms & Conditions
  • Disclaimer
  • Post
  • Gallery
  • Service
  • Portfolio
© 2025 Arunangshu Das. Designed by Arunangshu Das.

Type above and press Enter to search. Press Esc to cancel.