Multer Storage Configuration: DiskStorage vs MemoryStorage

Multer provides flexible storage options to control how and where uploaded files are stored. The two main storage engines are diskStorage and memoryStorage.

What is diskStorage in Multer?

diskStorage allows you to store uploaded files directly on your server’s file system.

It gives you full control over:

Example:

const multer = require("multer");

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

What is memoryStorage in Multer?

memoryStorage stores files in memory as Buffer objects instead of saving them to disk.

Example:

const multer = require("multer");

const storage = multer.memoryStorage();

Key points:

How to configure destination folder in Multer?

When using diskStorage, you define the destination using:

destination: function (req, file, cb) {
  cb(null, "uploads/");
}

How to customize filename in Multer?

You can control how files are named using the filename function:

filename: function (req, file, cb) {
  cb(null, Date.now() + "-" + file.originalname);
}

Common strategies:

When should I use memory storage vs disk storage?

Use diskStorage when:

Use memoryStorage when:

⚠️ Avoid memoryStorage for large files, as it can consume server RAM quickly.

Complete Example

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

const app = express();

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

const upload = multer({ storage });

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

app.listen(3000, () => {
  console.log("Server running on port 3000");
});

Key Takeaways