Skip to main content

Command Palette

Search for a command to run...

Storing Uploaded Files and Serving Them in Express

Updated
7 min readView as Markdown

Modern web applications constantly deal with file uploads.

Users upload:

  • Profile pictures

  • PDFs

  • Videos

  • Documents

  • Product images

  • Medical reports

But after a file is uploaded, an important question appears:

Where does the file actually go?

And another:

How does the browser later access that file?

In Express applications, file uploads usually involve two main concepts:

  1. Storing uploaded files

  2. Serving those files back to users

In this blog, you’ll learn:

  • Where uploaded files are stored

  • Local vs external storage

  • Static file serving in Express

  • Accessing uploaded files using URLs

  • Important security considerations


What Happens During File Upload?

When a user uploads a file:

  1. Browser sends file to server

  2. Express receives the file

  3. Server stores the file somewhere

  4. Application saves file path or URL

  5. File becomes accessible later


High-Level File Upload Flow

User Uploads File
        ↓
Express Server Receives File
        ↓
File Stored Somewhere
        ↓
Path/URL Saved
        ↓
Browser Can Access File Later

Where Uploaded Files Are Stored

Uploaded files must be stored somewhere permanently.

There are two common approaches:

  1. Local Storage

  2. External Storage


Local Storage

Local storage means:

  • Files are stored directly on your server machine

Example folder:

project/
│
├── uploads/
│     ├── image1.jpg
│     ├── profile.png
│     └── report.pdf
│
├── server.js
└── package.json

The files physically exist inside your project/server.


Why Beginners Usually Start with Local Storage

Local storage is:

  • Simple

  • Easy to understand

  • Fast to set up

  • Great for learning

Most beginner Express tutorials use local storage.


Real-Life Analogy

Think of local storage like:

  • Keeping files inside your office cabinet

The files remain physically near your application.


External Storage

Large production applications often use external storage services.

Examples include:

  • Cloud storage

  • CDN storage

  • Object storage services

Instead of storing files on the server itself:

  • Files are stored on specialized storage platforms

Real-Life Analogy

External storage is like:

  • Renting a warehouse for storing inventory

Your application simply references the files.


Local Storage vs External Storage

Feature Local Storage External Storage
Setup Simplicity Easy More complex
Good for Learning Yes Usually later
Scalability Limited Excellent
Storage Capacity Limited by server Very large
Performance Fine for small apps Better for large apps
Common Use Beginner projects Production systems

Common Upload Folder Structure

A common Express project structure looks like this:

project/
│
├── uploads/
│     ├── users/
│     ├── products/
│     └── documents/
│
├── public/
├── routes/
├── controllers/
└── server.js

This organization helps keep files manageable.


Serving Static Files in Express

After storing files, the next problem is:

How can users access them in the browser?

This is where static file serving comes in.


What Are Static Files?

Static files are files that can be directly served to the browser without processing.

Examples:

  • Images

  • PDFs

  • CSS files

  • Videos

  • JavaScript files


Express Static Middleware

Express provides built-in middleware for serving static files.

Example:

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

This tells Express:

“Make files inside the uploads folder publicly accessible.”


What This Means

If the folder contains:

uploads/profile.png

Then the browser can access:

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

The URL maps to the physical file.


Static File Serving Flow

Browser Requests:
   /uploads/profile.png
            ↓
Express Static Middleware
            ↓
Find File in uploads folder
            ↓
Send File to Browser

Accessing Uploaded Files via URL

Once static serving is configured:

  • Uploaded files become accessible through URLs

Example

Stored File

uploads/avatar.jpg

Accessible URL

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

The browser simply requests the file URL.


Simple Express Example

const express = require("express");

const app = express();

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

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

Now everything inside the uploads folder becomes accessible.


Why Static Serving Is Important

Without static serving:

  • Files may exist on the server

  • But browsers cannot access them

Static middleware acts like:

  • A bridge between files and URLs

Real-World Example

Suppose a user uploads:

resume.pdf

The application may save:

/uploads/resume.pdf

Now the frontend can display:

<a href="/uploads/resume.pdf">View Resume</a>

Security Considerations for Uploads

File uploads can become dangerous if handled carelessly.

This is extremely important in real applications.


1. Validate File Types

Never allow every file type blindly.

Example allowed types:

  • .jpg

  • .png

  • .pdf

Avoid allowing dangerous executable files.


Why This Matters

Malicious users may upload:

  • Harmful scripts

  • Executable files

  • Malware


2. Limit File Size

Always restrict upload size.

Without limits:

  • Attackers may upload huge files

  • Server storage may fill quickly


Example Idea

Max upload size:
5 MB

3. Rename Uploaded Files

Never trust original filenames completely.

Bad idea:

virus.exe

Better approach:

  • Generate unique safe filenames

Example:

173847382-profile.png

4. Avoid Public Access to Sensitive Files

Not every uploaded file should be public.

Examples:

  • Medical documents

  • Private reports

  • Identity proofs

These files often require:

  • Authentication checks

5. Store Uploads Outside Important System Folders

Avoid storing uploads:

  • Near application source code

  • Near sensitive config files

Keep uploads isolated.


Safe Upload Handling Checklist

Practice Why Important
Validate file type Prevent malicious uploads
Limit file size Prevent abuse
Rename files safely Avoid conflicts & attacks
Restrict private files Protect user data
Organize folders Easier maintenance

Beginner-Friendly Mental Model

The easiest way to understand uploads:


Uploading

Browser → Server → Storage Folder

Serving

Browser → File URL → Express → File

One Complete Upload Setup Diagram

User Uploads Image
        ↓
Express Receives File
        ↓
Stored in uploads/ folder
        ↓
Express Static Middleware
        ↓
File Gets Public URL
        ↓
Browser Displays Image

Why This Matters in Real Projects

Almost every real application needs uploads.

Examples:

  • Social media profile pictures

  • E-commerce product images

  • Resume uploads

  • Medical reports

  • Course videos

Understanding uploads is a core backend development skill.


Final Thoughts

File uploads in Express involve two major ideas:

  1. Storing files

  2. Serving files through URLs

The key concepts are:

Concept Purpose
Local Storage Save files on server
External Storage Save files on cloud services
Static Middleware Make files accessible
File URL Browser access path
Upload Validation Security & safety

For beginners:

  • Start with local storage

  • Learn static serving clearly

  • Focus on safe upload practices

Once you understand these basics, building real-world file upload systems becomes much easier.