[Servlet] download de fichier

download de fichier [Servlet] - Java - Programmation

Marsh Posté le 20-01-2003 à 18:01:27    

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.     }

Reply

Marsh Posté le 20-01-2003 à 18:01:27   

Reply

Marsh Posté le 21-01-2003 à 09:28:29    

:sweat: ouinnn personne qui me répond sniffff

Reply

Marsh Posté le 21-01-2003 à 10:16:42    

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]

Reply

Marsh Posté le 21-01-2003 à 11:35:44    

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
Reply

Marsh Posté le 21-01-2003 à 11:50:30    

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)

Reply

Marsh Posté le 21-01-2003 à 14:49:32    

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  

Reply

Marsh Posté le 21-01-2003 à 15:44:48    

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
Reply

Marsh Posté le 22-01-2003 à 08:25:21    

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

Reply

Marsh Posté le 22-01-2003 à 10:14:02    

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.

Reply

Marsh Posté le 22-01-2003 à 10:52:57    

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
Reply

Marsh Posté le 22-01-2003 à 10:52:57   

Reply

Marsh Posté le 22-01-2003 à 20:28:47    

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 ... :(

Reply

Marsh Posté le 23-01-2003 à 10:47:13    

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]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed