PHPackages                             heimrichhannot/contao-multifileupload - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. heimrichhannot/contao-multifileupload

Abandoned → [heimrichhannot/contao-multifileupload-bundle](/?search=heimrichhannot%2Fcontao-multifileupload-bundle)ArchivedContao-module[File &amp; Storage](/categories/file-storage)

heimrichhannot/contao-multifileupload
=====================================

Contao front end widget that provides dropzonejs.com functionality.

1.5.4(7y ago)12.8k1LGPL-3.0+PHPPHP ~5.4 || ~7.0

Since Nov 16Pushed 3mo ago4 watchersCompare

[ Source](https://github.com/heimrichhannot/contao-multifileupload)[ Packagist](https://packagist.org/packages/heimrichhannot/contao-multifileupload)[ Docs](https://github.com/heimrichhannot/contao-multifileupload)[ RSS](/packages/heimrichhannot-contao-multifileupload/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (5)Versions (67)Used By (1)

Contao Multi File Upload
========================

[](#contao-multi-file-upload)

[![](https://camo.githubusercontent.com/47356cd35d70615b6856b6792e26fae23a77c70935e8f523090a6526ddc1b6bf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6865696d7269636868616e6e6f742f636f6e74616f2d6d756c746966696c6575706c6f61642e737667)](https://camo.githubusercontent.com/47356cd35d70615b6856b6792e26fae23a77c70935e8f523090a6526ddc1b6bf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6865696d7269636868616e6e6f742f636f6e74616f2d6d756c746966696c6575706c6f61642e737667)[![](https://camo.githubusercontent.com/d5349afab102a2048f120d81e976d57377bacae9de0789165baa5fd4bcdf4641/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6865696d7269636868616e6e6f742f636f6e74616f2d6d756c746966696c6575706c6f61642e737667)](https://camo.githubusercontent.com/d5349afab102a2048f120d81e976d57377bacae9de0789165baa5fd4bcdf4641/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6865696d7269636868616e6e6f742f636f6e74616f2d6d756c746966696c6575706c6f61642e737667)[![](https://camo.githubusercontent.com/7a6aa9e09420582812d1c43ddd6a0ab6acfa78a2cd8f2f26a34e4273bc8fa507/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6865696d7269636868616e6e6f742f636f6e74616f2d6d756c746966696c6575706c6f61642e737667)](https://camo.githubusercontent.com/7a6aa9e09420582812d1c43ddd6a0ab6acfa78a2cd8f2f26a34e4273bc8fa507/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6865696d7269636868616e6e6f742f636f6e74616f2d6d756c746966696c6575706c6f61642e737667)

Contao front end widget that provides [dropzonejs.com](http://www.dropzonejs.com/) functionality to both back and front end. The javascript is written in native javascript and invoked for both jquery and mootools on "document ready" and "ajax complete".

Caution

This Contao 3/4 module was superseeded by the Contao 4/5 Bundle [heimrichhannot/contao-multifileupload-bundle](https://github.com/heimrichhannot/contao-multifileupload-bundle).

This repository is no longer maintained.

Screenshot
----------

[](#screenshot)

[![alt text](./doc/multifileupload-demo.jpg "Multifileupload demo within contao backend")](./doc/multifileupload-demo.jpg)

Features
--------

[](#features)

### Technical instructions

[](#technical-instructions)

Use the inputType "multifileupload" for your field. In the backend, the widget is replaced by a "fileTree".

```
'client_logo' => array(
    'label'     => &$GLOBALS['TL_LANG']['tl_jobmarket_job']['client_logo'],
    'exclude'   => true,
    'inputType' => TL_MODE == 'BE' ? 'fileTree' : 'multifileupload',
    'eval'      => array(
        'tl_class'      => 'clr',
        'extensions'    => \Config::get('validImageTypes'),
        'filesOnly'     => true,
        'fieldType'     => 'radio',
        'addRemoveLinks' => true,
        'minImageWidth'       => '600px',
        'minImageHeight'      => '300px',
        'maxImageWidth'       => '1600px',
        'maxImageHeight'      => '1200px',
        'multipleFiles' => false,
        'labels'        => array(
            'head' => &$GLOBALS['TL_LANG']['tl_jobmarket_job']['client_logo']['messageText'][0],
            'body' => &$GLOBALS['TL_LANG']['tl_jobmarket_job']['client_logo']['messageText'][1],
        ),
        'skipDeleteAfterSubmit' => true
    ),
    'upload_path_callback' => array(array('MyClass', 'getJobUploadPath')),
    'validate_upload_callback' => array(array('MyClass', 'validateUpload')),
    'sql'       => "blob NULL",
),

```

### Flow chart

[](#flow-chart)

A flowchart with description of the full upload procedure with callback injection can be found here: [Flowchart](./doc/upload-flow-chart.html).

### Eval-Properties

[](#eval-properties)

Defined at your field's dca.

NameDefaultDescriptionfieldType'checkbox'If set to "checkbox", multiple files can be uploaded, for single upload set to 'radio'extensions\\Config::get('uploadTypes')A comma separated list of allowed file types (e.g. "jpg,png")maxUploadSizeminimum of $GLOBALS\['TL\_CONFIG'\]\['maxFileSize'\] and php.ini 'upload\_max\_filesize'The desired maximum upload size measured in Bytes (e.g. "100"), KiB, MiB or GiB (e.g. "10M"). Can not exceed $GLOBALS\['TL\_CONFIG'\]\['maxFileSize'\] or php upload\_max\_filesize value.maxFiles10The maximum file count per fielduploadFoldernullThe upload folder as String, e.g. "files/uploads", function or array. **(must be declared !!!)**, required to move files to correct destination after submission.addRemoveLinkstrueRemove links are added to each of the file avatars in the jquery (caption can be overwritten within language files)minImageWidth0The minimum image width. Set to 0 for no min width image validation. All units from \\Image::getPixelValue() are supported.minImageHeight0The minimum image height. Set to 0 for no min height image validation. All units from \\Image::getPixelValue() are supported.maxImageWidth0The maximum image width. Set to 0 for no max width image validation. All units from \\Image::getPixelValue() are supported.maxImageHeight0The maximum image height. Set to 0 for no max image height validation. All units from \\Image::getPixelValue() are supported.minImageWidthErrorText$GLOBALS\['TL\_LANG'\]\['ERR'\]\['minWidth'\]Custom error message for minimum image width. (arguments provided: 1 - minimum width from config, 2 - current image width)minImageHeightErrorText$GLOBALS\['TL\_LANG'\]\['ERR'\]\['minHeight'\]Custom error message for minimum image height. (arguments provided: 1 - minimum height from config, 2 - current image height)maxImageWidthErrorText$GLOBALS\['TL\_LANG'\]\['ERR'\]\['maxWidth'\]Custom error message for maximum image width. (arguments provided: 1 - maximum width from config, 2 - current image width)maxImageHeightErrorText$GLOBALS\['TL\_LANG'\]\['ERR'\]\['maxHeight'\]Custom error message for maximum image height. (arguments provided: 1 - maximum height from config, 2 - current image height)createImageThumbnailsboolean(true)Set to false if you dont want to preview thumbnails.mimeFoldersystem/modules/multifileupload/assets/img/mimetypes/Numix-uTouchThe relative path from contao root to custom mimetype folder, mimetypes.json and images must lie inside. (example: system/modules/multifileupload/assets/img/mimetypes/Numix-uTouch)mimeThumbnailsOnlyboolean(false)Set to true if you want to show mime image thumbnails only, and no image preview at all. (performance improvement)thumbnailWidth90The thumbnail width (in px) of the uploaded file preview within the dropzone preview container.thumbnailHeight90The thumbnail height (in px) of the uploaded file preview within the dropzone preview container.labelsarray()Overwrite the head and body labels within the upload field.skipDeleteAfterSubmitfalsePrevent file removal from filesystem.### Field Callbacks

[](#field-callbacks)

TypeArgumentsExpected return valueDescriptionupload\_path\_callback$strTarget, \\File $objFile, \\DataContainer $dc$strTargetManipulate the upload path after form submission (run within onsubmit\_callback).validate\_upload\_callback\\File $objFile, \\Widget $objWidgetboolean(false) or string with frontend error messageValidate the uploaded file and add an error message if file does not pass validation, otherwise boolean(false) is expected.

###  Health Score

43

—

FairBetter than 91% of packages

Maintenance55

Moderate activity, may be stable

Popularity18

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity73

Established project with proven stability

 Bus Factor1

Top contributor holds 92.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~14 days

Recently: every ~36 days

Total

65

Last Release

2917d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/28ad3224d8727b622ebd229840eea6b9dbcb83eb0bd609e6ce65b614830ff538?d=identicon)[digitales@heimrich-hannot.de](/maintainers/digitales@heimrich-hannot.de)

---

Top Contributors

[![koertho](https://avatars.githubusercontent.com/u/12064642?v=4)](https://github.com/koertho "koertho (25 commits)")[![ericges](https://avatars.githubusercontent.com/u/25957923?v=4)](https://github.com/ericges "ericges (1 commits)")[![nafetagrats](https://avatars.githubusercontent.com/u/5796948?v=4)](https://github.com/nafetagrats "nafetagrats (1 commits)")

---

Tags

fileuploadcontaowidgetmultidropzone

### Embed Badge

![Health badge](/badges/heimrichhannot-contao-multifileupload/health.svg)

```
[![Health](https://phpackages.com/badges/heimrichhannot-contao-multifileupload/health.svg)](https://phpackages.com/packages/heimrichhannot-contao-multifileupload)
```

###  Alternatives

[kartik-v/yii2-widget-fileinput

An enhanced FileInput widget for Bootstrap 3.x, 4.x &amp; 5.x with file preview, multiple selection, and more features (sub repo split from yii2-widgets)

2286.8M94](/packages/kartik-v-yii2-widget-fileinput)[blueimp/jquery-file-upload

File Upload widget for jQuery.

141.5M17](/packages/blueimp-jquery-file-upload)[itskodinger/midia

Simple Media manager for your Laravel project

1415.8k](/packages/itskodinger-midia)[christianbarkowsky/contao-tiny-compress-images

This plugin automatically optimizes your images (JPG, PNG, WebP) by integrating with the popular image compression services TinyJPG and TinyPNG.

2719.0k](/packages/christianbarkowsky-contao-tiny-compress-images)[do-while/contao-backupdb-bundle

Backup of the Contao database, automatic backup, creation of website templates for the Install Tool

10107.0k](/packages/do-while-contao-backupdb-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
