FileSizeValidatorController

File Size Validator Controller

Validates file sizes against PHP upload limits before submission. Provides immediate feedback to users when files exceed server limits, preventing failed uploads and improving user experience.

Features:

  • Pre-upload file size validation
  • Multiple file support
  • Customizable warning messages
  • Integration with existing upload controls
  • Real-time feedback on file selection

Values:

  • maxSize: Maximum file size in bytes (from PHP upload_max_filesize/post_max_size)
  • maxSizeFormatted: Human-readable max size (e.g., '25MB')
  • totalMaxSize: Maximum total size for multiple files (defaults to maxSize)
  • showWarning: Whether to show warning messages (default: true)

Targets:

  • fileInput: File input element(s) to monitor
  • warning: Container for warning messages (optional)
  • submitButton: Submit button to disable when files are invalid (optional)

Events Dispatched:

  • file-size-validator:valid - All files are valid
  • file-size-validator:invalid - One or more files exceed limits
  • file-size-validator:warning - Warning displayed to user

Usage:

<div data-controller="file-size-validator"
     data-file-size-validator-max-size-value="26214400"
     data-file-size-validator-max-size-formatted-value="25MB">
  
  <input type="file" 
         data-file-size-validator-target="fileInput"
         data-action="change->file-size-validator#validateFiles">
  
  <div data-file-size-validator-target="warning" 
       class="alert alert-warning d-none"></div>
  
  <button type="submit" 
          data-file-size-validator-target="submitButton">
    Upload
  </button>
</div>

Constructor

new FileSizeValidatorController()

Examples
Multiple Files
```html
<input type="file" 
       multiple
       data-file-size-validator-target="fileInput"
       data-action="change->file-size-validator#validateFiles">
```
Custom Total Limit
```html
<div data-controller="file-size-validator"
     data-file-size-validator-max-size-value="26214400"
     data-file-size-validator-total-max-size-value="52428800">
```

Methods

buildInvalidFilesMessage(invalidFiles) → {string}

Build error message for invalid files

Parameters:
NameTypeDescription
invalidFilesArray

Array of invalid file objects

Returns:

Error message with HTML-escaped file names

Type: 
string

buildTotalSizeWarningMessage(totalSize, fileCount) → {string}

Build warning message for total size

Parameters:
NameTypeDescription
totalSizenumber

Total size in bytes

fileCountnumber

Number of files

Returns:

Warning message

Type: 
string

checkFileSizes(files) → {Object}

Check file sizes and return validation result

Parameters:
NameTypeDescription
filesArray.<File>

Array of File objects

Returns:

Validation result

Type: 
Object

clearWarning()

Clear warning message

connect()

Initialize controller

disableSubmit()

Disable submit button

dispatch(eventName, options)

Dispatch custom event

Parameters:
NameTypeDescription
eventNamestring

Event name (without prefix)

optionsObject

Event options

enableSubmit()

Enable submit button

escapeHtml(str) → {string}

Escape HTML special characters to prevent XSS

Parameters:
NameTypeDescription
strstring

String to escape

Returns:

Escaped string

Type: 
string

formatBytes(bytes, decimals) → {string}

Format bytes to human-readable string

Parameters:
NameTypeDefaultDescription
bytesnumber

Size in bytes

decimalsnumber2

Number of decimal places

Returns:

Formatted size string

Type: 
string

formatWarningMessage(message, type) → {string}

Format warning message with icon

Parameters:
NameTypeDefaultDescription
messagestring

Warning message

typestringwarning

Message type ('error' or 'warning')

Returns:

Formatted HTML

Type: 
string

showInvalidFilesWarning(validation)

Show warning for invalid files

Parameters:
NameTypeDescription
validationObject

Validation result

showTotalSizeWarning(validation)

Show warning for total size

Parameters:
NameTypeDescription
validationObject

Validation result

validateFiles(event)

Validate selected files

Parameters:
NameTypeDescription
eventEvent

File input change event