Je voudrais télécharger une image et poster d'autres variables vers la servlet et je n'ai aucune erreur dans ajax, par-contre l'image n'est jamais enregistrée.
Voilà mon form
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <form id="formAddProduit" enctype="multipart/form-data" method="post" action=""> <input type="file" name="img[]" id="img" /> <input type="button" id="btn_add_produit" value="Ajouter produit"/> </form>
voici ma fonction jQuery ajax :
Code javascript : 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 $("#formAddProduit #btn_add_produit").click(function(e){ e.preventDefault(); var fd=new FormData(); console.log("image :",$("#img").get(0).files[0]); fd.append("img",$("#img").get(0).files[0]); fd.append("role","addproduit"); $.ajax({ url:"Ajax", method:"POST", dataType:"json", processData: false, contentType :false, data:fd }) .done(function(data){ console.log("Done :",data); }) .fail(function(err){ alert("Erreur addproduit ajax :",err.responseText); }); });
voici ma servlet :
Code java : 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
75 else if(request.getParameter("role").equals("addproduit")) { FileItemFactory factory = (FileItemFactory) new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List uploadedItems = null; FileItem fileItem = null; String // Path to store file on local system filePath = "C:\\Users\\hp\\Documents\\NetBeansProjects\\Site_achat_enligne_5emeannee\\web\\img\\uploadFiles"; try { // iterate over all uploaded files uploadedItems = upload.parseRequest(request); Iterator i = uploadedItems.iterator(); while (i.hasNext()) { ind.put("nom_fichier","teste...."); fileItem = (FileItem) i.next(); if (fileItem.isFormField() == false) { if (fileItem.getSize() > 0) { File uploadedFile = null; String myFullFileName = fileItem.getName(), myFileName = "", slashType = (myFullFileName.lastIndexOf("\\") > 0) ? "\\" : "/"; // Windows or UNIX int startIndex = myFullFileName.lastIndexOf(slashType); // Ignore the path and get the filename myFileName = myFullFileName.substring (startIndex + 1, myFullFileName.length()); // Create new File object uploadedFile = new File(filePath, myFileName); // Write the uploaded file to the system fileItem.write(uploadedFile); } } } } catch (FileUploadException e) { ind.put("erreurUpload","erreur upload"); e.printStackTrace(); } catch (Exception e) { ind.put("erreurExcep","erreur excep"); e.printStackTrace(); } json= new Gson().toJson(ind); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); }
Le problème se situe dans la ligne 27 du code servlet, parce que je ne reçois pas la variable ind dans le success d'ajax.
Si je la met avant le while dans ce cas je reçois bien la variable ind.
Pourquoi le script n'entre pas dans la boucle while ?!
Partager