Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1803 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Servlet] download de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Servlet] download de fichier

n°290156
Prince2Lu
Posté le 20-01-2003 à 18:01:27  profilanswer
 

J'ai 2 problèmes :
- sous ie 6 quand je clike sur mon bouton download, il m envoie dans ma servlet et me propose la boite de dialogue "enregistrer" mais si après avoir appuyer une première fois sur ce bouton, on réappuye, ie se bloque en cherchant quelque chose (il passe dans la servlet et après ca rame alors que le fichier fait 10ko) et si pendant que ca rame je réappuye sur ce bouton, il m ouvre bien cette boite de dialogue ... comprends pas  :heink: pourquoi ki fo appuyer 2 fois sur le bouton  :??:  
- sous netscape 7 dans la boite de dialogue de download, il me rajoute comme extension de fichier le nom de ma Servlet du style fichier.text.nomdemaServlet  comprends pas non plus  :heink:  
mais pas de problème comme sous ie pour plusieurs téléchargements.
 
voici le code
 
dans ma servlet pour downloader un fichier du serveur , je fais dans mon doPost

Code :
  1. setAdaptedContentType(_response,file.length(),file.getName());
  2. ServletOutputStream binaryOutputStream = _response.getOutputStream();
  3. file.write(binaryOutputStream);
  4. binaryOutputStream.close();


 

Code :
  1. private void setAdaptedContentType (HttpServletResponse _response, int _lengthFile, String _value)
  2.     {
  3.        String strContentType   = "application/octet-stream";
  4.        String strContentDisp   = "attachment;filename=" + _value;
  5.        _response.setHeader ("Content-Disposition", strContentDisp);
  6.        _response.setContentLength (_lengthFile);
  7.        _response.setContentType(strContentType);
  8.     }

mood
Publicité
Posté le 20-01-2003 à 18:01:27  profilanswer
 

n°290502
Prince2Lu
Posté le 21-01-2003 à 09:28:29  profilanswer
 

:sweat: ouinnn personne qui me répond sniffff

n°290551
Prince2Lu
Posté le 21-01-2003 à 10:16:42  profilanswer
 

A priori ce serait un problème de flux quand je copie mon fichier dans le flux de sortie . comprends pas HelP (attention je jette une bouteille à la mer)
 

Code :
  1. public void write (OutputStream _out) throws FileNotFoundException, IOException
  2.     {
  3.         FileInputStream fileInputStream = new FileInputStream(file);
  4.         byte[] data = new byte[1024*10];
  5.         while (fileInputStream.read (data) != -1)
  6.             _out.write (data);
  7.         fileInputStream.close ();
  8.     }


 
c la fonction write du permier post
 
 [:the time]

n°290647
darklord
You're welcome
Posté le 21-01-2003 à 11:35:44  profilanswer
 

tu as chercher sur le web avec les mots clés "servlet download" ou un truc du genre. Je me souviens d'un article avec code et tout qui explique comment faire ce que tu cherches ...


---------------
Just because you feel good does not make you right
n°290664
Prince2Lu
Posté le 21-01-2003 à 11:50:30  profilanswer
 

oui j ai cherché et je suis tombé sur jspsmartupload qui fait tout ca mais en l 'utilisant
 
http://www.jspsmart.com/scripts/sh [...] ample6.jsp
 
j'obtiens ça comme erreur :
 

Code :
  1. java.lang.IllegalStateException: getOutputStream() has already been called for this response
  2. at org.apache.catalina.connector.ResponseBase.getWriter(ResponseBase.java:750)
  3. at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:165)
  4. at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:166)
  5. at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:158)
  6. at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:205)
  7. at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:177)
  8. at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:198)
  9. at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:193)
  10. at org.apache.jsp.download$jsp._jspService(download$jsp.java:118)
  11. at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
  12. at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  13. at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
  14. at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
  15. at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
  16. at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  17. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
  18. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
  19. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
  20. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
  21. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
  22. at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
  23. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
  24. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
  25. at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
  26. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
  27. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
  28. at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
  29. at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
  30. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
  31. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
  32. at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
  33. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
  34. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
  35. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
  36. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
  37. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
  38. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
  39. at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
  40. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
  41. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
  42. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
  43. at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
  44. at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:458)
  45. at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551)
  46. at java.lang.Thread.run(Thread.java:536)

n°290858
Prince2Lu
Posté le 21-01-2003 à 14:49:32  profilanswer
 

bon je sais toujours pas d ou ca venait, surement d un flux qui allait se perdre on ne sait ou  
toujours est-il que ca marche avec du code quasi similaire ou on fout tout dans le doPost  
 
http://www.experts-exchange.com/Pr [...] 578.html#1
 
Merci Darklord pour ton soutien moral dans ce post   :D  

n°290948
darklord
You're welcome
Posté le 21-01-2003 à 15:44:48  profilanswer
 

Prince2Lu a écrit :

bon je sais toujours pas d ou ca venait, surement d un flux qui allait se perdre on ne sait ou  
toujours est-il que ca marche avec du code quasi similaire ou on fout tout dans le doPost  
 
http://www.experts-exchange.com/Pr [...] 578.html#1
 
Merci Darklord pour ton soutien moral dans ce post   :D  
 


 
pour ton info, l'erreur du dessus provient du faire que tu as déjà commencé à écrire une réponse quelconque. Si tu enlèves les appels vers un quelconque writer ca devrait fonctionner ... Mais il faut voir le code pour savoir.
 
A+


---------------
Just because you feel good does not make you right
n°291532
benou
Posté le 22-01-2003 à 08:25:21  profilanswer
 

DarkLord a écrit :


pour ton info, l'erreur du dessus provient du faire que tu as déjà commencé à écrire une réponse quelconque. Si tu enlèves les appels vers un quelconque writer ca devrait fonctionner ... Mais il faut voir le code pour savoir.
A+


 :non: quand on est dans une JSP on ne peut plus ni faire un getOutputStream ni faire de dispatch car la méthode getWriter a déjà été appelée pour armer la variable out

n°291644
El_gringo
Posté le 22-01-2003 à 10:14:02  profilanswer
 

benou a écrit :


 :non: quand on est dans une JSP on ne peut plus ni faire un getOutputStream ni faire de dispatch car la méthode getWriter a déjà été appelée pour armer la variable out


 
Mais justement, il n'est pas dans une JSP pour cette raison. Il est dans une servlet.

n°291675
darklord
You're welcome
Posté le 22-01-2003 à 10:52:57  profilanswer
 

benou a écrit :


 :non: quand on est dans une JSP on ne peut plus ni faire un getOutputStream ni faire de dispatch car la méthode getWriter a déjà été appelée pour armer la variable out


 
bin je sais ça merci ... Mais il me semble, comme le dit gringo qu'il s'agit d'une servlet non?
 
Où ai je raté qqch :??:


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 22-01-2003 à 10:52:57  profilanswer
 

n°292146
benou
Posté le 22-01-2003 à 20:28:47  profilanswer
 

El_gringo a écrit :


 
Mais justement, il n'est pas dans une JSP pour cette raison. Il est dans une servlet.


ben on dirait pas :

Citation :

oui j ai cherché et je suis tombé sur jspsmartupload qui fait tout ca mais en l 'utilisant  
 
http://www.jspsmart.com/scripts/sh [...] ample6.jsp


 
ou bien je suis encore plus endormi que ce matin ... :(

n°292400
Prince2Lu
Posté le 23-01-2003 à 10:47:13  profilanswer
 

jspsmartupload, on peut s en servir dans une servlet ou dans une jsp, ca plante dans les 2 cas ... et il donne pas les sources bien que ce soit gratuit.
 
Donc la bonne solution c'est de faire :
 

Code :
  1. public void doPost(HttpServletRequest _request, HttpServletResponse _response) throws ServletException, IOException
  2.    {
  3.          HttpSession session = _request.getSession(true);
  4.          File fi = (File)session.getAttribute(FILE);
  5.      
  6.        
  7.              _response.setContentType("application/octet-stream" );
  8.              _response.setHeader("Content-Disposition","attachment; filename="+fi.getName()+";" );
  9.              _response.setContentLength ((int)fi.length());
  10.              ServletOutputStream out = _response.getOutputStream();
  11.              BufferedInputStream fif= new BufferedInputStream(new FileInputStream(fiTmp.getFile()));
  12.              // copie le fichier dans le flux de sortie
  13.              int data;
  14.              while((data = fif.read())!=-1) {
  15.              out.write(data);
  16.              }
  17.              fif.close();
  18.              out.close();
  19.          }


 
Voila voila  [:kritikal kombat]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Servlet] download de fichier

 

Sujets relatifs
[HTML] appeler un fichier dans un tableau?Fichier vcl60 dans le bureau
[PHP] Récuperer le texte d'un fichier sur un autre serveurenvoi d'un fichier local vers vers un serveur ftp
[C]Fonction qui verifie l'existence d'un fichierDebutant Servlet : gros pb!!!
[ASP]Modifier un fichier Word[java]récupérer la date d'un fichier ?
Comment creer un fichier .exe extractible à partir de fichiers ?[HTML|JS]a href file:/// et download de fichier
Plus de sujets relatifs à : [Servlet] download de fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR