Next

File Upload

  • File upload enables applications to receive files and images using Multer in Node.js and Express.
  • Uploading Files with Multer

    Multer is a middleware for handling multipart/form-data, which is primarily used for uploading files in Node.js/Express applications.

    Why Multer is Used:

    • Parses incoming file data

    • Saves files to disk or memory

    • Handles file size and type validation

    • Works seamlessly with Express routes

    Install Multer

npm install multer
  • Example – Basic File Upload

File Uploads with Multer in Express.js

Uses Multer middleware to handle file uploads in Express.js, storing files on disk with custom filenames and validating file presence before saving.

const express = require("express");
const multer = require("multer");

const app = express();

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

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

// Route to upload single file
app.post("/upload", upload.single("file"), (req, res) => {
  if (!req.file) {
    return res.status(400).send("No file uploaded");
  }
  res.send(`File uploaded: ${req.file.filename}`);
});

app.listen(3000, () => console.log("Server running on port 3000"));
  • Explanation:

    • upload.single("file") handles a single file from form-data

    • Multer stores file in uploads/ directory

    • File name can be customized with timestamp to avoid conflicts

    Handling Images

    Images are files that may require additional handling like resizing, validation, or storage in cloud storage (e.g., AWS S3, Cloudinary).

    Example – Image Type Validation

Handling Image Uploads with Multer

Validates uploaded files to ensure only images are accepted, allowing custom handling like resizing or cloud storage integration.

const upload = multer({
  storage: storage,
  fileFilter: (req, file, cb) => {
    if (file.mimetype.startsWith("image/")) {
      cb(null, true);
    } else {
      cb(new Error("Only image files are allowed"));
    }
  },
});
  • Example – Upload Multiple Images

app.post("/photos", upload.array("photos", 5), (req, res) => {
  const filenames = req.files.map(file => file.filename);
  res.send(`Uploaded files: ${filenames.join(", ")}`);
});
  • Explanation:

    • upload.array("photos", 5) → upload up to 5 files

    • File validation ensures only images are accepted

    • You can later resize images using libraries like Sharp

Next