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:
- Destination folder
- File naming
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:
- Files are not saved to disk
- Stored temporarily in RAM
- Available via
req.file.buffer
How to configure destination folder in Multer?
When using diskStorage, you define the destination using:
destination: function (req, file, cb) {
cb(null, "uploads/");
}
"uploads/"is the folder where files will be stored- Ensure the folder exists before uploading
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:
- Add timestamps
- Use unique IDs
- Preserve original file names
When should I use memory storage vs disk storage?
Use diskStorage when:
- You want to store files on the server
- Files are large
- You need persistence
Use memoryStorage when:
- You want to process files immediately
- Uploading to cloud storage (e.g., S3, Cloudinary)
- Files are small and temporary
⚠️ 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
diskStoragesaves files to the servermemoryStoragekeeps files in RAM- Customize destination and filename using functions
- Choose storage based on file size and use case