Bonjour
J'ai un formulaire qui me permet d'envoyer une image à une Servlet et de la copier dans un dossier sur le disque. Tout marche bien sauf que j'aimerai utiliser la technologie AJAX dans le but de ne pas charger la page lors de l'envoi de l'image. Or, Ajax ne supporte pas le " multipart/form-data", du coup je ne sais pas comment gérer l'envoi des fichiers avec Java sans utiliser le " multipart/form-data".
Voici le message d'erreur que je reçois:
Voici ma fonction Ajax:javax.servlet.ServletException: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header is text/plain;charset=UTF-8
at org.apache.catalina.connector.Request.parseParts(Request.java:2811)
at org.apache.catalina.connector.Request.getParts(Request.java:2665)
at org.apache.catalina.connector.Request.getPart(Request.java:2835)
at org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:1083)
Voici ma méthode de validation de l'image provenant de ma Servlet:
Code : 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 $(function() { var form = $('#form1'); form.submit(function () { $.ajax({ type: form.attr('method'), contentType: false, url: form.attr('action'), data: form.serialize(), success: function (data) { var result=data; //var result=data.split(" "); //var donnee1 = result[0]; //var donnee2 = result[1]; $('#result').attr("value",result); }, error: function() { alert('La requête n\'a pas abouti'); } }); return false; }); });
Merci
Code : 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 private String validationImage( HttpServletRequest request, String chemin ) throws FormValidationException { /* * Récupération du contenu du champ image du formulaire. Il faut ici * utiliser la méthode getPart(). */ String nomFichier = null; InputStream contenuFichier = null; try { Part part = request.getPart( CHAMP_IMAGE ); nomFichier = getNomFichier( part ); /* * Si la méthode getNomFichier() a renvoyé quelque chose, il s'agit * donc d'un champ de type fichier (input type="file"). */ if ( nomFichier != null && !nomFichier.isEmpty() ) { /* * Antibug pour Internet Explorer, qui transmet pour une raison * mystique le chemin du fichier local à la machine du client... * * Ex : C:/dossier/sous-dossier/fichier.ext * * On doit donc faire en sorte de ne sélectionner que le nom et * l'extension du fichier, et de se débarrasser du superflu. */ nomFichier = nomFichier.substring( nomFichier.lastIndexOf( '/' ) + 1 ) .substring( nomFichier.lastIndexOf( '\\' ) + 1 ); /* Récupération du contenu du fichier */ contenuFichier = part.getInputStream(); /* Extraction du type MIME du fichier depuis l'InputStream */ MimeUtil.registerMimeDetector( "eu.medsea.mimeutil.detector.MagicMimeMimeDetector" ); Collection<?> mimeTypes = MimeUtil.getMimeTypes( contenuFichier ); /* * Si le fichier est bien une image, alors son en-tête MIME * commence par la chaîne "image" */ if ( mimeTypes.toString().startsWith( "image" ) ) { /* Écriture du fichier sur le disque */ ecrireFichier( contenuFichier, nomFichier, chemin ); } else { throw new FormValidationException( "Le fichier envoyé doit être une image." ); } } } catch ( IllegalStateException e ) { /* * Exception retournée si la taille des données dépasse les limites * définies dans la section <multipart-config> de la déclaration de * notre servlet d'upload dans le fichier web.xml */ e.printStackTrace(); throw new FormValidationException( "Le fichier envoyé ne doit pas dépasser 1Mo." ); } catch ( IOException e ) { /* * Exception retournée si une erreur au niveau des répertoires de * stockage survient (répertoire inexistant, droits d'accès * insuffisants, etc.) */ e.printStackTrace(); throw new FormValidationException( "Erreur de configuration du serveur." ); } catch ( ServletException e ) { /* * Exception retournée si la requête n'est pas de type * multipart/form-data. */ e.printStackTrace(); throw new FormValidationException( "Ce type de requête n'est pas supporté, merci d'utiliser le formulaire prévu pour envoyer votre fichier." ); } return nomFichier; }
Partager