diff --git a/src/module_vmap/module/javascript/app/vmap/tools/insert.js b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
index 3e2a40ce1ede6f7d9f266c25b9d54b077e6eb669..b4b7e11aabe4ec7145ccb781d40db4ae9276cd5f 100644
--- a/src/module_vmap/module/javascript/app/vmap/tools/insert.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
@@ -1528,14 +1528,24 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getFormDat
     var oFormData_ = new FormData();
 
     for (var key in oValues) {
+
+        var bIsMultipleFiles = false;
+        if (goog.isObject(oValues[key])) {
+            if (goog.isDefAndNotNull(oValues[key].length)) {
+                bIsMultipleFiles = true
+            }
+        }
+
         // Fichier ?
-        if (goog.isDefAndNotNull(oValues[key])) {
-            if (goog.isDefAndNotNull(oValues[key]['aFiles'])) {
-                oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]);
-                oFormData_.append(key, oValues[key]['aFiles'][0]['name']);
-            } else {
-                oFormData_.append(key, oValues[key]);
+        if (goog.isDefAndNotNull(oValues[key]['aFiles'])) {
+            oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]);
+            oFormData_.append(key, oValues[key]['aFiles'][0]['name']);
+        } else if (bIsMultipleFiles) {
+            for (var i = 0; i < oValues[key].length; i++) {
+                oFormData_.append(key + '[]', oValues[key][i]);
             }
+        } else {
+            oFormData_.append(key, oValues[key]);
         }
     }
 
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
index 40e7600350320c0c3a9d0e026ba2554433e1bdad..6438fce7e678a9d6e390b184d5a9bd03cc69a6e0 100755
--- a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
@@ -1650,10 +1650,22 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getFormDataFro
     var oFormData_ = new FormData();
 
     for (var key in oValues) {
+
+        var bIsMultipleFiles = false;
+        if (goog.isObject(oValues[key])) {
+            if (goog.isDefAndNotNull(oValues[key].length)) {
+                bIsMultipleFiles = true
+            }
+        }
+
         // Fichier ?
         if (goog.isDefAndNotNull(oValues[key]['aFiles'])) {
             oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]);
             oFormData_.append(key, oValues[key]['aFiles'][0]['name']);
+        } else if (bIsMultipleFiles) {
+            for (var i = 0; i < oValues[key].length; i++) {
+                oFormData_.append(key + '[]', oValues[key][i]);
+            }
         } else {
             oFormData_.append(key, oValues[key]);
         }
diff --git a/src/vitis/client/javascript/app/services/formSrvc.js b/src/vitis/client/javascript/app/services/formSrvc.js
index d1075e84ad00f65136abdd6d98b090bc17a030d5..ea6c95d42a8297b55bc48a2cf018081df3c214a1 100755
--- a/src/vitis/client/javascript/app/services/formSrvc.js
+++ b/src/vitis/client/javascript/app/services/formSrvc.js
@@ -57,6 +57,9 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe
                                     if (goog.isDefAndNotNull(oFiles)) {
                                         if (oFiles.length > 0) {
                                             oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oFiles[0];
+                                            if (oFiles.length > 1) {
+                                                oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oFiles;
+                                            }
                                             if (goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["width"]) && goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["height"])) {
                                                 oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_width"] = aFormRowElementsList[ifieldIndex]["width"];
                                                 oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_height"] = aFormRowElementsList[ifieldIndex]["height"];
@@ -74,6 +77,9 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe
                                             if (goog.isDefAndNotNull(oElemValue['aFiles'])) {
                                                 if (goog.isDefAndNotNull(oElemValue['aFiles'][0])) {
                                                     oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oElemValue['aFiles'][0];
+                                                    if (oElemValue['aFiles'].length > 1) {
+                                                        oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oElemValue['aFiles'];
+                                                    }
                                                     if (goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["width"]) && goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["height"])) {
                                                         oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_width"] = aFormRowElementsList[ifieldIndex]["width"];
                                                         oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_height"] = aFormRowElementsList[ifieldIndex]["height"];
@@ -163,7 +169,6 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe
                     i++;
                 }
             }
-            //
             return oFormData;
         },
         /**
diff --git a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
index 8c065e61e984b8a61df5f948fa42cac33e9d89bf..7d3a99d1e45dde528478d33d0d8d8591a5ff6162 100644
--- a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
+++ b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
@@ -875,6 +875,14 @@ formReader.appFormFieldSpecificParamsDrtv = function ($timeout, $translate, prop
                     $(element)["fileinput"](oOptions);
                     break;
                 case 'file_wsdata':
+
+                    // Évite la multiplication des champs depuis le studio
+                    // quand on coche/décoche "Multiple documents"
+                    if ($(element).parent().find('.file-input').length > 0) {
+                        $(element).remove();
+                        break;
+                    }
+
                     // Si sélection d'un fichier à uploader : sauve ses paramètres.
                     element[0].addEventListener("change", function () {
                         var oFileList = {
@@ -909,6 +917,14 @@ formReader.appFormFieldSpecificParamsDrtv = function ($timeout, $translate, prop
                     $(element)["fileinput"](oOptions);
                     break;
                 case 'image_wsdata':
+
+                    // Évite la multiplication des champs depuis le studio
+                    // quand on coche/décoche "Multiple documents"
+                    if ($(element).parent().find('.file-input').length > 0) {
+                        $(element).remove();
+                        break;
+                    }
+
                     if (!goog.isDefAndNotNull(scope["field"]["display_width"])) {
                         scope["field"]["display_width"] = "100%";
                     }
diff --git a/src/vitis/client/javascript/externs/studio/lang/lang-en.json b/src/vitis/client/javascript/externs/studio/lang/lang-en.json
index dc673374030c00a3dd49a37bd8677dd2b4d05e4f..a470fad3b6802063ae4d04acc82522a5394c05f4 100755
--- a/src/vitis/client/javascript/externs/studio/lang/lang-en.json
+++ b/src/vitis/client/javascript/externs/studio/lang/lang-en.json
@@ -155,6 +155,7 @@
                 "Height": "Height :",
                 "Required": "Required",
                 "displayOnly": "Display only",
+                "multipleFiles": "Multiple files",
                 "Default": "Default",
                 "DefaultValue": "Default value",
                 "DynamicOptions": "Dynamic options",
diff --git a/src/vitis/client/javascript/externs/studio/lang/lang-fr.json b/src/vitis/client/javascript/externs/studio/lang/lang-fr.json
index 3527a5d149be9cbc62c82ede5db623f1aa4aec4d..479588c5c2089f36182e3d2ca7fb3932bed7c72b 100755
--- a/src/vitis/client/javascript/externs/studio/lang/lang-fr.json
+++ b/src/vitis/client/javascript/externs/studio/lang/lang-fr.json
@@ -161,6 +161,7 @@
                 "Height": "Hauteur :",
                 "Required": "Requis",
                 "displayOnly": "Uniquement en consultation",
+                "multipleFiles": "Multiple documents",
                 "Default": "Défaut",
                 "DefaultValue": "Valeur par défaut",
                 "DynamicOptions": "Options dynamiques",
diff --git a/src/vitis/client/javascript/externs/studio/templates/ElementForm.html b/src/vitis/client/javascript/externs/studio/templates/ElementForm.html
index 6d8afd0c2bdf057cae928390853988119c2e6e32..bb828ebde46b3ea9c5429e4e5aadcf6be1ab4355 100755
--- a/src/vitis/client/javascript/externs/studio/templates/ElementForm.html
+++ b/src/vitis/client/javascript/externs/studio/templates/ElementForm.html
@@ -1649,6 +1649,10 @@
                         <label id="label_slider_Element_size" for="slider_Element_size">{{::ctrl.text.Component.General.Width}}</label>
                         <input ng-disabled="locker" data-app-param-element id="slider_Element_size" data-slider-id='slider_Element_size' type="text" data-slider-min="0" data-slider-max="12" data-slider-step="1" data-slider-value="12" required>
                     </div>
+                    <div class="checkbox checkbox-primary checkbox_margin">
+                        <input ng-disabled="locker" type="checkbox" name="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_input" ng-model="model.multiple">
+                        <label for="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_label" class="control-label unselectable ">{{::ctrl.text.Component.General.multipleFiles}}</label>
+                    </div>
                     <div class="checkbox checkbox-primary checkbox_margin">
                         <input ng-disabled="locker" type="checkbox" name="Element_Form_displayOnly_input" id="Element_Form_displayOnly_input" ng-model="model.displayOnly">
                         <label for="Element_Form_displayOnly_input" id="Element_Form_displayOnly_label" class="control-label unselectable ">{{::ctrl.text.Component.General.displayOnly}}</label>
@@ -1730,6 +1734,10 @@
                         <label id="label_slider_Element_size" for="slider_Element_size">{{::ctrl.text.Component.General.Width}}</label>
                         <input ng-disabled="locker" data-app-param-element id="slider_Element_size" data-slider-id='slider_Element_size' type="text" data-slider-min="0" data-slider-max="12" data-slider-step="1" data-slider-value="12" required>
                     </div>
+                    <div class="checkbox checkbox-primary checkbox_margin">
+                        <input ng-disabled="locker" type="checkbox" name="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_input" ng-model="model.multiple">
+                        <label for="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_label" class="control-label unselectable ">{{::ctrl.text.Component.General.multipleFiles}}</label>
+                    </div>
                     <div class="checkbox checkbox-primary checkbox_margin">
                         <input ng-disabled="locker" type="checkbox" name="Element_Form_displayOnly_input" id="Element_Form_displayOnly_input" ng-model="model.displayOnly">
                         <label for="Element_Form_displayOnly_input" id="Element_Form_displayOnly_label" class="control-label unselectable ">{{::ctrl.text.Component.General.displayOnly}}</label>