Works with any backend npm install Zero dependencies

Per-File Progress

Individual progress bars for each file in the queue using onQueueRender to build a fully custom queue UI with per-file progress tracking.

new MultipleUpload(document.getElementById('demo-perfile'), {
 uploadUrl: '/api/upload',
 multiple: true,
 onQueueRender: function(tasks, queueEl) {
 var container = document.getElementById('perfile-queue');
 container.innerHTML = '';
 tasks.forEach(function(task) {
 var row = document.createElement('div');
 row.className = 'pf-item';
 row.innerHTML =
 '<span class="pf-name">' + task.fileName + '</span>' +
 '<div class="pf-bar"><div class="pf-bar-fill" style="width:' + task.progress + '%"></div></div>' +
 '<span class="pf-pct">' + Math.round(task.progress) + '%</span>';
 container.appendChild(row);
 });
 }
});

A bar per file

onQueueRender hands rendering to you, so each row can carry its own progress indicator driven by task.progress. For a queue of any length that is far more useful than one aggregate number, because it says which file is slow.

Show the states, not just the percentage

Queued, uploading, paused, retrying, complete and failed all look different to the user and should look different on the row. Retrying is the one most often omitted, and it is exactly the state where a static bar makes people think the upload has died.