Bonjour
J'ai un problème d'envoi/éception de fichier depuis un programme java vers une servlet
But:
1) Passer un fichier pdf de Programme.java vers servlet
2) Puis passer un autre fichier pdf de servlet vers Programme.java
Remarque:
Pour mon test, les deux fichiers à envoyer sont les memes : c:/temp/test.pdf
Mais lorsque j'envoie "test.pdf" de :
- Programme vers servlet, je devrais obtenir un fichier "FichierATraiterRecupParServlet.pdf"
- servlet vers Programme, je devrais obtenir un fichier "FichierATraiterRecupParProg.pdf"
Resultat obtenu:
1) De Programme vers servlet : rien ne se passe :
- aucune erreur
- aucune trace dans les logs,
- pas de fichier "FichierATraiterRecupParProg.pdf" cree
2) De servlet vers programme:
- obtention d'un fichier "FichierATraiterRecupParProg.pdf" mais non lisible car taille du fichier ne correspond pas
- aucune erreur
- aucune trace dans les log : je pense donc qu'il n'y a pas eu de communication entre le programme et servlet
Quelqu'un pourrait-il m'aider à resoudre mon probleme?
Merci d'avance
Voici le code que j'utilise pour Programme.java et servlet.
Programme.java
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 String sCheminFichierOrigProg ="C:/temp/test.pdf"; try { // Connection: URL urlservlet = new URL("http://localhost:8080/maservlet/"); HttpURLConnection connexion = (HttpURLConnection)urlservlet.openConnection(); connexion.setDoInput(true); connexion.setDoOutput(true); connexion.setUseCaches(false); // DEBUT Script pour envoyer fichier de Programme vers servlet File fFichierOrigProg = new File(sCheminFichierOrigProg); long lengthFichierOrigProg = fFichierOrigProg.length(); byte[] tabByteFichierOrigProg = new byte[(int) lengthFichierOrigProg]; // Creation d'un byte[] correspondant au fichier a envoye FileInputStream fisOrigProg = new FileInputStream(sCheminFichierOrigProg); fisOrigProg.read(tabByteFichierOrigProg); fisOrigProg.close(); // Envoi de fichier (sous forme de byte[]) vers la servlet OutputStream outProg = connexion.getOutputStream(); outProg.write(tabByteFichierOrigProg, 0, tabByteFichierOrigProg.length); outProg.flush(); outProg.close(); // FIN Script pour envoyer fichier de Programme vers servlet // DEBUT Script pour recuperer fichier de servlet vers Programme InputStream instrProg = connexion.getInputStream(); byte[] tabByteFichierRecupParProg = new byte[instrProg.available()]; instrProg.read(tabByteFichierRecupParProg); instrProg.close(); // Transformation de byte[] en fichier ByteArrayInputStream baisFichierRecupParProg = new ByteArrayInputStream(tabByteFichierRecupParProg); File fFichierRecupParProg = null; File fDir = new File("C:/temp/"); try { fFichierRecupParProg = File.createTempFile("FichierATraiterRecupParProg", ".pdf", fDir); FileOutputStream fosFichierRecupParProg = new FileOutputStream(fFichierRecupParProg); int i; while ((i = baisFichierRecupParProg.read()) != -1) { fosFichierRecupParProg.write(i); } if (baisFichierRecupParProg != null) { baisFichierRecupParProg.close(); } fosFichierRecupParProg.close(); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); } // FIN Script pour recuperer fichier de servlet vers Programme } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } System.out.println("THE END");
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
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 public class servlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // DEBUT Script pour recuperer le fichier (sous forme d'un byte[]) en provenance de Programme.java InputStream instrServlet = request.getInputStream(); byte[] tabByteFichierRecupParServlet = new byte[instrServlet.available()]; instrServlet.read(tabByteFichierRecupParServlet); instrServlet.close(); // Transformation du byte[] en fichier ByteArrayInputStream baisFichierRecupParServlet = new ByteArrayInputStream(tabByteFichierRecupParServlet); File fFichierRecupParServlet = null; File fDir = new File("C:/temp/"); try { fFichierRecupParServlet = File.createTempFile("FichierATraiterRecupParServlet", ".pdf", fDir); FileOutputStream fosFichierRecupParServlet = new FileOutputStream(fFichierRecupParServlet); int i; while ((i = baisFichierRecupParServlet.read()) != -1) { fosFichierRecupParServlet.write(i); } if (baisFichierRecupParServlet != null) { baisFichierRecupParServlet.close(); } fosFichierRecupParServlet.close(); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); } // FIN Script pour recuperer le fichier (sous forme d'un byte[]) en provenance de Programme.java // DEBUT Script pour envoyer fichier vers Programme.java String sFichierOrigServlet = "C:/temp/test.pdf"; File fFichierOrigProg = new File(sFichierOrigServlet); long lengthFichierOrigServlet = fFichierOrigProg.length(); byte[] tabByteFichierOrigServlet = new byte[(int) lengthFichierOrigServlet]; try { FileInputStream fisOrigServlet = new FileInputStream(sFichierOrigServlet); int i = fisOrigServlet.read(tabByteFichierOrigServlet); ServletOutputStream outServlet = response.getOutputStream(); // response.setHeader("Content-Disposition", "attachment;filename=" + sFichierOrigServlet); outServlet.write(tabByteFichierOrigServlet); fisOrigServlet.close(); outServlet.flush(); outServlet.close(); } catch (IOException ex) { log("probleme envoi fichier, erreur= " + ex); } // FIN Script pour envoyer fichier vers Programme.java } }
Partager