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