diff --git a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.css b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.css
new file mode 100644
index 0000000000000000000000000000000000000000..a07fe94a91e0ab3802d1c778104f5f642795c7d3
--- /dev/null
+++ b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.css
@@ -0,0 +1,72 @@
+.file_picker .preview-images-zone {
+    width: 100%;
+    border: 1px solid #ddd;
+    min-height: 180px;
+    /* display: flex; */
+    padding: 5px 5px 0px 5px;
+    position: relative;
+    overflow:auto;
+}
+.file_picker .preview-images-zone > .preview-image-small {
+    height: 90px !important;
+    width: 90px !important;
+}
+.file_picker .preview-images-zone > .preview-image {
+    height: 185px;
+    width: 185px;
+    position: relative;
+    margin-right: 5px;
+    float: left;
+    margin-bottom: 5px;
+}
+.file_picker .preview-images-zone > .preview-image > .image-zone {
+    width: 100%;
+    height: 100%;
+}
+.file_picker .preview-images-zone > .preview-image > .image-add {
+    text-align: center;
+    font-size: 30px;
+    padding-top: calc(50% - 20px);
+}
+.file_picker .preview-images-zone > .preview-image > .image-zone > img {
+    width: 100%;
+    height: 100%;
+}
+.file_picker .preview-images-zone > .preview-image > .tools-edit-image {
+    position: absolute;
+    z-index: 100;
+    color: #fff;
+    bottom: 0;
+    width: 100%;
+    text-align: center;
+    margin-bottom: 10px;
+    display: none;
+}
+.file_picker .preview-images-zone > .preview-image > .image-cancel {
+    font-size: 18px;
+    position: absolute;
+    top: 0;
+    right: 0;
+    font-weight: bold;
+    margin-right: 10px;
+    cursor: pointer;
+    display: none;
+    z-index: 100;
+}
+.file_picker .preview-image:hover > .image-add,
+.file_picker .preview-image:hover > .image-zone {
+    cursor: pointer;
+    opacity: .5;
+}
+.preview-image:hover > .tools-edit-image,
+.file_picker .preview-image:hover > .image-cancel {
+    display: block;
+}
+.file_picker .ui-sortable-helper {
+    width: 90px !important;
+    height: 90px !important;
+}
+
+.file_picker .container {
+    padding-top: 50px;
+}
diff --git a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.html b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.html
new file mode 100644
index 0000000000000000000000000000000000000000..99df493fc9ff47ee174c988e8186561d4e72c4de
--- /dev/null
+++ b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.html
@@ -0,0 +1,39 @@
+
+<link rel="stylesheet" ng-href="{{ folderUrl }}/file_picker.css">
+
+<div class="file_picker">
+
+    <label for="{{:refresh:field.id}}" id="{{:refresh:field.id}}_label" class="control-label" data-translate="{{:refresh:field.label}}"></label>
+
+    <!-- Visioneuse Images -->
+    <div ng-if="field.type === 'image_wsdata'" class="preview-images-zone">
+        <div ng-repeat="image in aPreviewImages"
+             ng-class="{'preview-image-small' : aPreviewImages.length > 4}"
+             class="preview-image preview-show-{{$index}}">
+            <div class="image-cancel" data-no="{{$index}}">x</div>
+            <div class="image-zone"><img id="pro-img-{{$index}}" ng-src="{{image.src}}"></div>
+            <div class="tools-edit-image">
+                <a href="javascript:void(0)" data-no="{{$index}}" class="btn btn-light btn-edit-image">
+                    <span class="ison-zoom-in"></span>
+                </a>
+            </div>
+        </div>
+        <div ng-if="!field.displayOnly"
+             ng-class="{'preview-image-small' : aPreviewImages.length > 4}"
+             class="preview-image preview-show-{{$index}}">
+            <div class="image-add" ng-click="searchNewFile()"><span class="icon-plus"></span></div>
+        </div>
+    </div>
+
+    <!-- Visioneuse fichiers -->
+    <div ng-show="aFiles.length > 0" tabindex="500" class="form-control file-caption  kv-fileinput-caption">
+        <div class="file-caption-name" title="7 fichiers sélectionné(s)"><span class="glyphicon glyphicon-file kv-caption-icon"></span> {{aFiles.length}} fichier(s) à modifier</div>
+    </div>
+
+    <!-- Bouton caché input -->
+    <div class="hide"
+         ng-if="!field.displayOnly">
+        <input ng-if="!field.multiple" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required">
+        <input ng-if="field.multiple" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required" multiple>
+    </div>
+</div>
diff --git a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js
new file mode 100644
index 0000000000000000000000000000000000000000..781f80451d9a560deb803c3bf5f68ba068add3a7
--- /dev/null
+++ b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js
@@ -0,0 +1,226 @@
+/* global goog, ol, nsVitisComponent, vitisApp, formReader, bootbox */
+
+/**
+ * @author: Anthony Borghi, Armand Bahi
+ * @Description: Fichier contenant la classe nsVitisComponent.Map
+ * Permet d'instancier un composant OpenLayers3
+ */
+
+'use strict';
+
+goog.provide('nsVitisComponent.FilePicker');
+
+goog.require('formReader');
+goog.require('nsVitisComponent.Map');
+
+/**
+ * FilePicker Directive
+ * @param {type} $timeout
+ * @returns {nsVitisComponent.FilePickerDirective}
+ * @ngInject
+ */
+nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertiesSrvc, formReaderService, $log, $q) {
+    return {
+        restrict: 'A',
+        scope: {
+            'field': '=appField',
+            'oFormDefinition': '=appFormDef',
+            'sFormDefinitionName': '=appFormDefName',
+            'oFormValues': '=appFormVal'
+        },
+        // controller: 'AppFilePickerController',
+        controllerAs: 'ctrl',
+        templateUrl: window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : '') + "/" + sessionStorage["appEnv"] + '/javascript/externs/formReader/component/file_picker/file_picker.html',
+        compile: function (element, attributes) {
+            return {
+                pre: function (scope, element, attributes, controller, transcludeFn) {
+                    $log.log("formReader.FilePickerDirective.pre");
+
+                    scope.folderUrl = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : '') + "/" + sessionStorage["appEnv"] + '/javascript/externs/formReader/component/file_picker';
+
+                    /**
+                     * Fichiers à envoyer
+                     */
+                    scope['aFiles'] = [];
+
+                    /**
+                     * Liste des URL des images à afficher
+                     */
+                    scope['aPreviewImages'] = [];
+
+                    /**
+                     * Add the added files to scope.aFiles
+                     * @param  {type} event
+                     * @export
+                     */
+                    scope['addFiles'] = function(event) {
+                        var files = event['target']['files'];
+                        for (var i = 0; i < files.length; i++) {
+                            if (scope['isFilePresent'](files[i])) {
+                                console.error('file already present');
+                            } else {
+                                scope['aFiles'].push(files[i]);
+                            }
+                        }
+
+                        console.log("scope['aFiles']: ", scope['aFiles']);
+                    }
+
+                    /**
+                     * Initialise l'élément bootstrap fileInput
+                     * @export
+                     */
+                    scope['initBootstrapFileInputs'] = function() {
+
+                        var deferred = $q.defer();
+
+                        if (!goog.isDefAndNotNull(scope["field"]["display_width"])) {
+                            scope["field"]["display_width"] = "100%";
+                        }
+                        // Si sélection d'un fichier à uploader : sauve ses paramètres.
+                        element[0].addEventListener("change", function () {
+                            var oFileList = {
+                                "aFiles": this.files
+                            };
+                            if (goog.isDefAndNotNull(scope["field"]["width"]) && goog.isDefAndNotNull(scope["field"]["height"])) {
+                                oFileList["width"] = scope["field"]["width"];
+                                oFileList["height"] = scope["field"]["height"];
+                            }
+
+                            scope["oFormValues"][scope["sFormDefinitionName"]][element[0].name] = oFileList;
+                        }, false);
+                        // Passage de paramètres de définition du champ d'upload ?
+                        // var oOptions = {
+                        //     "showPreview": false,
+                        //     "showRemove": false,
+                        //     "showUpload": false,
+                        //     "allowedFileTypes": ['image']
+                        // };
+                        // oOptions["mainClass"] = "input-file-" + scope["oFormDefinition"][scope["sFormDefinitionName"]]["input_size"];
+                        //
+                        // // Langue.
+                        // if (propertiesSrvc["language"] != "en")
+                        //     oOptions["language"] = propertiesSrvc["language"];
+
+                        // Intégration du plugin "bootstrap-fileinput" dans tous les champ d'upload de fichiers.
+                        setTimeout(function () {
+                            var oInput = $(element).find('#' + scope['field']['id']);
+                            // $(oInput)["fileinput"](oOptions);
+                            deferred.resolve(oInput);
+                        });
+
+                        return deferred.promise;
+                    }
+
+                    /**
+                     * Init the images preview
+                     * @export
+                     */
+                    scope['initImagesPreview'] = function() {
+
+                        scope['aPreviewImages'] = [];
+
+                        var file;
+                        for (var i = 0; i < scope['aFiles'].length; i++) {
+                            file = scope['aFiles'][i];
+
+                            if (!file.type.match('image')) continue;
+
+                            var picReader = new FileReader();
+                            picReader.addEventListener('load', angular.bind(this, function (file, event) {
+                                var picFile = event.target;
+                                scope.$applyAsync(function(){
+                                    scope['aPreviewImages'].push({
+                                        'name': file['name'],
+                                        'src': picFile['result']
+                                    });
+                                });
+                            }, file));
+
+                            picReader.readAsDataURL(file);
+                        }
+                    }
+
+                    /**
+                     * Test if a file is already present
+                     * @param  {object} oFile file to test
+                     * @return {boolean} true if the file is already present
+                     * @export
+                     */
+                    scope['isFilePresent'] = function(oFile) {
+                        var bIsFilePresent = false;
+                        for (var i = 0; i < scope['aFiles'].length; i++) {
+                            if (scope['aFiles'][i]['name'] === oFile['name']) {
+                                bIsFilePresent = true;
+                            }
+                        }
+                        return bIsFilePresent;
+                    }
+
+                    /**
+                     * Show the finder to search no files to add
+                     * @export
+                     */
+                    scope['searchNewFile'] = function() {
+                        var oInput = $(element).find('#' + scope['field']['id']);
+                        $(oInput).click();
+                    }
+                },
+                post: function (scope, element, attributes, controller, transcludeFn) {
+                    $log.log("formReader.FilePickerDirective.post");
+
+                    console.log("field: ", scope['field']);
+                    console.log("oFormDefinition: ", scope['oFormDefinition']);
+                    console.log("sFormDefinitionName: ", scope['sFormDefinitionName']);
+                    console.log("oFormValues: ", scope['oFormValues']);
+
+                    // Initialise l'élément bootstrap fileInput
+                    scope['initBootstrapFileInputs']().then(function(oInput) {
+
+                        // Écoute les changements pour afficher les images dans la liste
+                        $(oInput).change(function(e){
+
+                            // Ajoute les fichiers
+                            scope['addFiles'](e);
+
+                            // Affichage des images
+                            if (scope['field']['type'] === 'image_wsdata') {
+                                scope['initImagesPreview']();
+                            }
+
+                            // Set la nouvelle valeur de l'attibut
+                            setTimeout(function () {
+                                oInput[0]['files_vitis'] = scope['aFiles'];
+                            });
+                        });
+                    });
+
+                    // Initialise l'affichage des images
+                    if (scope['field']['type'] === 'image_wsdata') {
+                        scope['initImagesPreview']();
+                    }
+                }
+            };
+        }
+    };
+};
+formReader.module.directive('appFilePicker', nsVitisComponent.FilePickerDirective);
+
+// /**
+//  * FilePicker Controller
+//  * @param {type} $scope
+//  * @param {type} $log
+//  * @returns {nsVitisComponent.FilePickerController}
+//  * @ngInject
+//  */
+// nsVitisComponent.FilePickerController = function ($scope, $log) {
+//     $log.info("FilePickerController");
+//     var this_ = this;
+//
+//     this.$log_ = $log;
+//     this.$scope_ = $scope;
+//
+//     console.log("$scope: ", $scope);
+//
+// };
+// formReader.module.controller('AppFilePickerController', nsVitisComponent.FilePickerController);
diff --git a/src/vitis/client/javascript/externs/formReader/formReader.html b/src/vitis/client/javascript/externs/formReader/formReader.html
index bec175d509bb7cc60b97fc19e66fa200af6d4c44..82e6b378dcf08fd01341ae116a0f000f9604d668 100755
--- a/src/vitis/client/javascript/externs/formReader/formReader.html
+++ b/src/vitis/client/javascript/externs/formReader/formReader.html
@@ -368,14 +368,28 @@
                                     </div>
                                     <!-- image ws_data -->
                                     <div ng-switch-when="image_wsdata">
-                                        <label for="{{:refresh:field.id}}" id="{{:refresh:field.id}}_label" class="control-label" data-translate="{{:refresh:field.label}}"></label>
+
+                                        <div id="{{:refresh:field.id}}_image_picker"
+                                             data-app-file-picker=""
+                                             data-app-field="field"
+                                             data-app-form-def="oFormDefinition"
+                                             data-app-form-def-name="sFormDefinitionName"
+                                             data-app-form-val="oFormValues"></div>
+
+                                        <!-- <label for="{{:refresh:field.id}}" id="{{:refresh:field.id}}_label" class="control-label" data-translate="{{:refresh:field.label}}"></label>
+                                        <input ng-if="!field.multiple" data-app-form-field-specific-params="" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required">
+                                        <input ng-if="field.multiple" data-app-form-field-specific-params="" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required" multiple> -->
+
+
+
+                                        <!-- <label for="{{:refresh:field.id}}" id="{{:refresh:field.id}}_label" class="control-label" data-translate="{{:refresh:field.label}}"></label> -->
                                         <!--Si l'image n'existe pas-->
-                                        <div ng-if="!field.displayOnly" ng-show="!oFormValues[sFormDefinitionName][field.name].length > 0">
+                                        <!-- <div ng-if="!field.displayOnly" ng-show="!oFormValues[sFormDefinitionName][field.name].length > 0">
                                             <input ng-if="!field.multiple" data-app-form-field-specific-params="" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required">
                                             <input ng-if="field.multiple" data-app-form-field-specific-params="" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required" multiple>
-                                        </div>
+                                        </div> -->
                                         <!--Si l'image existe-->
-                                        <div ng-show="oFormValues[sFormDefinitionName][field.name].length > 0">
+                                        <!-- <div ng-show="oFormValues[sFormDefinitionName][field.name].length > 0">
                                             <img id="{{:refresh:field.id}}_img" ng-src="{{oFormValues[sFormDefinitionName][field.name]}}" alt="image" class="img-responsive" width="{{field.display_width}}"/>
                                             <div ng-if="!field.displayOnly">
                                                 <div style="float: left; width:95%">
@@ -386,7 +400,9 @@
                                                     <a ng-href="{{oFormValues[sFormDefinitionName][field.name]}}" download class="btn btn-xs btn-success"><span class="glyphicon glyphicon-download"></span></a>
                                                 </div>
                                             </div>
-                                        </div>
+                                        </div> -->
+
+
                                     </div>
                                     <!-- Boutons -->
                                     <div ng-switch-when="button">
diff --git a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
index 7d3a99d1e45dde528478d33d0d8d8591a5ff6162..49bc4b74cfe3be5fcf16eaf31b3f9ea51fe80594 100644
--- a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
+++ b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
@@ -7,6 +7,7 @@
  */
 goog.provide('formReader.directive.formReaderDirective');
 goog.require('nsVitisComponent.MapWorkbench');
+goog.require('nsVitisComponent.FilePicker');
 goog.require('formReader');
 
 /**
@@ -916,46 +917,46 @@ formReader.appFormFieldSpecificParamsDrtv = function ($timeout, $translate, prop
                     // Intégration du plugin "bootstrap-fileinput" dans tous les champ d'upload de fichiers.
                     $(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%";
-                    }
-                    // Si sélection d'un fichier à uploader : sauve ses paramètres.
-                    element[0].addEventListener("change", function () {
-                        var oFileList = {
-                            "aFiles": this.files
-                        };
-                        if (goog.isDefAndNotNull(scope["field"]["width"]) && goog.isDefAndNotNull(scope["field"]["height"])) {
-                            oFileList["width"] = scope["field"]["width"];
-                            oFileList["height"] = scope["field"]["height"];
-                        }
-
-                        scope["oFormValues"][scope["sFormDefinitionName"]][element[0].name] = oFileList;
-                    }, false);
-                    // Passage de paramètres de définition du champ d'upload ?
-                    var oOptions = {
-                        "showPreview": false,
-                        "showRemove": false,
-                        "showUpload": false,
-                        "allowedFileTypes": ['image']
-                    };
-                    oOptions["mainClass"] = "input-file-" + scope["oFormDefinition"][scope["sFormDefinitionName"]]["input_size"];
-
-                    // Langue.
-                    if (propertiesSrvc["language"] != "en")
-                        oOptions["language"] = propertiesSrvc["language"];
-
-                    // Intégration du plugin "bootstrap-fileinput" dans tous les champ d'upload de fichiers.
-                    $(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%";
+                //     }
+                //     // Si sélection d'un fichier à uploader : sauve ses paramètres.
+                //     element[0].addEventListener("change", function () {
+                //         var oFileList = {
+                //             "aFiles": this.files
+                //         };
+                //         if (goog.isDefAndNotNull(scope["field"]["width"]) && goog.isDefAndNotNull(scope["field"]["height"])) {
+                //             oFileList["width"] = scope["field"]["width"];
+                //             oFileList["height"] = scope["field"]["height"];
+                //         }
+                //
+                //         scope["oFormValues"][scope["sFormDefinitionName"]][element[0].name] = oFileList;
+                //     }, false);
+                //     // Passage de paramètres de définition du champ d'upload ?
+                //     var oOptions = {
+                //         "showPreview": false,
+                //         "showRemove": false,
+                //         "showUpload": false,
+                //         "allowedFileTypes": ['image']
+                //     };
+                //     oOptions["mainClass"] = "input-file-" + scope["oFormDefinition"][scope["sFormDefinitionName"]]["input_size"];
+                //
+                //     // Langue.
+                //     if (propertiesSrvc["language"] != "en")
+                //         oOptions["language"] = propertiesSrvc["language"];
+                //
+                //     // Intégration du plugin "bootstrap-fileinput" dans tous les champ d'upload de fichiers.
+                //     $(element)["fileinput"](oOptions);
+                //     break;
                 case 'email':
                     scope["field"]["pattern"] = "^(([a-zA-Z]|[0-9])|([-]|[_]|[.]))+[@](([a-zA-Z]|[0-9])|([-]|[_]|[.])){2,63}[.](([a-zA-Z0-9]){2,63})+$";
                     // Utile dans le studio pour mémoriser la patern
diff --git a/src/vitis/client/modules/vitis/forms/user/user_vitis_user.json b/src/vitis/client/modules/vitis/forms/user/user_vitis_user.json
index a5dacd7e5ccd46a776a8381a46c298adce8ab53f..f5b906f14e010effaa5637ebb3275aa7155d3aa2 100644
--- a/src/vitis/client/modules/vitis/forms/user/user_vitis_user.json
+++ b/src/vitis/client/modules/vitis/forms/user/user_vitis_user.json
@@ -49,6 +49,52 @@
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"image_wsdata",
+                        "name":"image",
+                        "label":"Image",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"Element_0_11_1",
+                        "display_width":"100%",
+                        "multipleFiles":true,
+                        "multiple":true
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"image_wsdata",
+                        "name":"image_bis",
+                        "label":"Imabe Bis",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"Element_2_9_1",
+                        "display_width":"100%",
+                        "multiple":true
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"file_wsdata",
+                        "name":"rapport_doc",
+                        "nb_cols":12,
+                        "id":"Element_0_12_1",
+                        "label":"Rapport",
+                        "default_value":"",
+                        "displayOnly":false,
+                        "multipleFiles":true,
+                        "multiple":true
+                    }
+                ]
+            },
             {
                 "fields": [
                     {