Works with any backend npm install Zero dependencies
Combined Validation Rules

Stack multiple validation rules: extensions, MIME, size, duplicates, dimensions, and a custom rule.

(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,
        allowedExtensions: '.jpg,.png,.pdf',
        allowedMimeTypes: 'image/*,application/pdf',
        validateMimeByMagic: true,
        maxFileSize: '5MB',
        minFileSize: '1KB',
        maxFiles: 5,
        preventDuplicates: true,
        maxImageWidth: 5000,
        maxImageHeight: 5000,
        customValidation: function(file) {
            if (/\s/.test(file.name)) return 'No spaces in file names.';
            return null;
        },
        onValidationError: function(msg, name) { log((name||'file') + ': ' + msg); },
        onTaskComplete: function(task) { log(task.fileName + ' uploaded'); }
    });
})();