Works with any backend npm install Zero dependencies

Large File Upload

Upload very large files (500 MB+) using chunked uploads. The progress display shows speed and ETA for long-running transfers.

new MultipleUpload(document.getElementById('demo-large-file'), {
 uploadUrl: '/api/upload',
 chunked: true,
 chunkSize: 5 * 1024 * 1024, // 5 MB chunks
 concurrency: 3,
 onTaskStart: function() {
 document.getElementById('large-file-stats').style.display = '';
 },
 onTaskProgress: function(task) {
 document.getElementById('lf-pct').textContent = Math.round(task.progress) + '%';
 document.getElementById('lf-speed').textContent =
 MultipleUpload.formatSize(task.speed) + '/s';
 document.getElementById('lf-bytes').textContent =
 MultipleUpload.formatSize(task.uploadedBytes) + ' / ' +
 MultipleUpload.formatSize(task.fileSize);
 document.getElementById('lf-eta').textContent =
 MultipleUpload.formatTime(task.eta);
 }
});

What a large upload actually needs

Three things together: chunked so no single request is big, retries so a dropped connection costs one chunk, and resume so an interruption does not mean starting over. Any one of them alone leaves a gap the others cover.

The limits stop being the problem

Once no request is large, the body-size caps on your server and every proxy in front of it are no longer the ceiling on file size — which is the real reason chunking exists. Beyond a few gigabytes, consider direct-to-cloud instead, where the bytes never touch your server at all.