Skip to content
All projects

Chunked & Resumable File Upload

A production-grade demonstration of handling large file uploads with resilience and efficiency.

Published
Stack
  • Vanilla JavaScript
  • Node.js
  • Express
  • Multer
Live at
github.com
Screenshot 1 / 2

A production-grade demonstration of handling large file uploads with resilience and efficiency. Built with Vanilla JavaScript, Node.js, Express, and Multer.

Why This Matters

Uploading large files is deceptively complex. Network interruptions, server timeouts, and bandwidth limitations can turn a simple file upload into a frustrating user experience. This project tackles these challenges head-on.

Key Features

  • Chunked Uploads — Files are split into 1MB chunks and uploaded sequentially, preventing server timeout issues
  • Resumability — Upload progress persists in localStorage. If interrupted, users can resume exactly where they left off
  • Retry Logic — Automatic retry with exponential backoff (up to 3 attempts) for failed chunks
  • Progress Tracking — Real-time display of chunks uploaded, transfer speed, and ETA
  • Client-Side Validation — File type and size validation before upload begins

Technical Highlights

  • Pure Vanilla JS on the client — no frameworks, just clean DOM APIs
  • Express + Multer on the server for robust multipart handling
  • AbortController for cancellable fetch requests
  • LocalStorage for upload state persistence across sessions
  • CSS-only animations with prefers-reduced-motion support