Home

Setting File Upload Size Limits in Node.js with Express

22 views

When building a Node.js backend, it's important to set a maximum file size limit for uploads to prevent users from uploading excessively large files that could strain server resources. You can achieve this by using middleware like express-fileupload or multer, which provide mechanisms for handling file uploads. Below, I'll show you how to set the maximum file size using both express-fileupload and multer.

Using express-fileupload

First, ensure you have installed express-fileupload in your project:

npm install express-fileupload

Here is a basic setup to handle file uploads with a maximum file size limit:

const express = require('express');
const fileUpload = require('express-fileupload');

const app = express();

// Enable files upload
app.use(fileUpload({
  limits: { fileSize: 1 * 1024 * 1024 }, // 1 MB limit for uploaded files
}));

app.post('/upload', (req, res) => {
  if (!req.files || Object.keys(req.files).length === 0) {
    return res.status(400).send('No files were uploaded.');
  }

  const uploadedFile = req.files.file;

  // Your further processing (e.g., move file, store metadata, etc.)
  res.send('File uploaded successfully!');
});

app.listen(3000, () => {
  console.log('Server started on http://localhost:3000');
});

Using multer

Alternatively, you can use multer for file uploads. First, install the package:

npm install multer

Here’s how to implement it with a file size limit:

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

const app = express();

// Set up multer for file uploads
const upload = multer({
  limits: { fileSize: 1 * 1024 * 1024 }, // 1 MB limit for uploaded files
  storage: multer.memoryStorage(), // Storing files in memory
});

app.post('/upload', upload.single('file'), (req, res) => {
  if (!req.file) {
    return res.status(400).send('No file uploaded.');
  }

  // Access uploaded file via req.file
  // Further processing (e.g., save to disk, cloud storage, etc.)

  res.send('File uploaded successfully!');
});

app.listen(3000, () => {
  console.log('Server started on http://localhost:3000');
});

Explanation

  • limits: Both libraries (express-fileupload and multer) allow setting size limits for uploaded files to avoid overloading the server. In these examples, the limit is set to 1 MB.

  • Error Handling: Both setups return a 400 status code if no files are uploaded. You might want to add additional error handling to manage cases where files exceed the allowed size or other upload errors.

  • Storage Strategy: While express-fileupload by default stores files in memory (but can write them to disk), multer can be configured for different storage strategies depending on your needs.

These configurations help you maintain control over resources and improve your application's stability and security. Adjust the fileSize limit based on your application's requirements and server capacity.