Bonjour à tous,
Je cherche de l'aide sur la bibliothèque dropzone.js. (fichier js en pièce jointe)
J'ai beau parcourir la doc je n'arrive pas à trouver comment détecter les doublons de fichiers avec cette "dropzone". je cherche à checker côté serveur si le fichier existe déjà dans mon dossier et à générer un message d'erreur côté dropzone dans le cas où le fichier existe déjà côté serveur.
Si quelqu'un à déjà travailler dessus je suis preneur de quelques conseils.
côté vue voici mon code :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <div class="row"> <div class="col-lg-4"> </div> <div class="col-lg-4"> <div class="panel panel-default"> <div class="panel-heading">Sélectionner un fichier XLS, XLSX : </div> <div class="panel-body"> <form class="dropzone my-dropzone" id="form_snippet_image" action="{{path('ajax_snippet_image_send')}}"> </form> </div> </div> <div class="col-lg-4"> </div> </div> <script> //je récupère l'action où sera traité l'upload en PHP var _actionToDropZone = $("#form_snippet_image").attr('action'); //je définis ma zone de drop grâce à l'ID de ma div citée plus haut. Dropzone.autoDiscover = false; var myDropzone = new Dropzone("#form_snippet_image", { url: _actionToDropZone }); myDropzone.on('addedfile', function(file) { alert('un nouveau fichier uploadé !'); }); </script>
côté contrôleur (Symfony3) voici ce que j'ai fais :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 /** * * @Method({"GET", "POST"}) * @Route("/ajax/snippet/image/send", name="ajax_snippet_image_send") * @Security("has_role('ROLE_USER')") */ public function ajaxSnippetImageSendAction(Request $request) { $finder = new Finder(); $filesList = array(); $finder->files()->in('uploads/files'); foreach($finder as $file) { $filesList[] = $file->getRelativePathname(); } $em = $this->container->get("doctrine.orm.default_entity_manager"); $document = new Document(); $media = $request->files->get('file'); $nom_fichier = $media->getClientOriginalName(); if (!in_array($nom_fichier, $filesList)) { $document->setFile($media); $document->setPath($media->getPathName()); $document->setName($nom_fichier); $document->setDateUpload(new \DateTime()); $document->preUpload(); $document->upload(); $em->persist($document); $em->flush(); //infos sur le document envoyé var_dump($request->files->get('file')) or die; return new JsonResponse(array('success' => true)); } else { var_dump($request->files->get('file')) or die; return new JsonResponse(array('success'=> false, 'error' => true)); } }
Le problème est que visuellement l'utilisateur n'a pas de message il ne se passe rien. Cela fonctionne car cela n'importe pas le fichier une seconde fois sur mon serveur en revanche visuellement côté navigateur je ne comprends pas comment afficher un message d'erreur dans la dropzone. ( je comprends quasi rien à l'AJAX )
L'idée est de pouvoir récupérer un message d'erreur qui serait interprétable par les fonctinnalités déjà existantes dans la dropzone.
Est-ce faisable ?
D'avance merci à tous pour votre aide.
Partager