Works with any backend npm install Zero dependencies
Task Lifecycle Events

Trace the full lifecycle of each task: added, start, progress, complete/error.

(function() {
    var logEl = document.getElementById('log');
    function log(m) { var d = document.createElement('div'); d.className='pkg-log-entry'; d.textContent=m; logEl.appendChild(d); logEl.scrollTop=logEl.scrollHeight; }
    new MultipleUpload('#demo', {
        uploadUrl: '/api/upload',
        multiple: true,
        onFileAdded: function(t) { log('[added] ' + t.fileName); },
        onTaskStart: function(t) { log('[start] ' + t.fileName); },
        onTaskProgress: function(t) { log('[progress] ' + t.fileName + ' ' + t.progress + '%'); },
        onTaskComplete: function(t) { log('[complete] ' + t.fileName); },
        onTaskError: function(t, e) { log('[error] ' + t.fileName + ': ' + e); },
        onTaskRetry: function(t) { log('[retry] ' + t.fileName + ' attempt ' + t.retryCount); },
        onAfterUpload: function(t, r) { log('[afterUpload] ' + t.fileName + ' guid=' + (r.fileGuid||'?')); }
    });
})();