Skip to main content

Command Palette

Search for a command to run...

Storing Uploaded Files and Serving Them in Express

Updated
3 min read
Storing Uploaded Files and Serving Them in Express

When users upload files such as images, documents, or videos to a web application, those files need to be stored somewhere and made accessible when required. In Express.js applications, understanding where uploaded files are stored and how they are served is important for building secure and efficient systems.

Where Are Uploaded Files Stored?

Uploaded files can be stored in different locations depending on the application's requirements. The most common approach is to save files in a dedicated folder on the server.

For example:

root-dir/
│
├── uploads/
│   ├── image1.jpg
│   ├── image2.png
│   └── document.pdf
│
├── routes/
├── controllers/
└── server.js

In this structure, all uploaded files are stored inside the uploads folder.

Local Storage vs External Storage

There are two main ways to store uploaded files.

1. Local Storage

Local storage means files are saved directly on the application's server.

Advantages:

  • Easy to set up

  • No additional service required

  • Good for small applications

Disadvantages:

  • Limited storage space

  • Files may be lost if the server crashes

  • Difficult to scale for large applications

2. External Storage

External storage uses cloud services such as AWS S3, Google Cloud Storage, or Cloudinary.

Advantages:

  • Highly scalable

  • Better reliability

  • Easy backup and recovery

Disadvantages:

  • Additional cost

  • Requires configuration and setup

For production applications with many users, external storage is usually preferred.

Serving Static Files in Express

By default, uploaded files cannot be accessed directly through a browser. Express provides a feature called static file serving that allows files to be publicly available.

Example:

import express from 'express'
const app = express();

app.use('/uploads', express.static('uploads'));

This tells Express to serve files from the uploads folder whenever a request is made to the /uploads path.

Accessing Uploaded Files via URL

After configuring static file serving, uploaded files can be accessed using a URL.

For example:

uploads/profile.jpg

Can be accessed through:

http://localhost:3000/uploads/profile.jpg

When a user opens this URL in a browser, the image will be displayed directly.

Static File Serving Flow

User Uploads File
        │
Stored in uploads Folder
        │
Express Static Middleware
        │
Generated Public URL
        │
User Accesses File in Browser

Security Considerations for Uploads

File uploads can create security risks if not handled properly. Developers should always follow safe practices.

Validate File Types

Allow only specific file formats such as JPG, PNG, or PDF.

Limit File Size

Restrict maximum upload size to prevent server overload.

Rename Uploaded Files

Generate unique file names to avoid conflicts and security issues.

Scan for Malicious Files

Check uploaded files before storing them.

Store Sensitive Files Securely

Do not expose private documents through public URLs.

Safe File Handling Practices

Here are some recommended practices:

  • Validate file extensions and MIME types.

  • Set upload size limits.

  • Use unique file names.

  • Store sensitive files outside public directories.

  • Regularly remove unused files.

  • Keep backups of important uploads.

  • Use cloud storage for large-scale applications.

Conclusion

File uploads are an essential feature in modern web applications. Files can be stored either locally on the server or in external cloud storage services. Express makes it easy to serve uploaded files using static middleware, allowing users to access files through URLs. However, developers must also follow security best practices to keep uploaded content safe and protect the application from potential threats.