[SERVLET] envoi de fichier vers IE
Bonjour, j'ai un servlet qui est appellé dans une popup et qui est sensé envoyer un fichier au client.
Mon code fonctionne mais pas tout le temps...
par exemple: quand je suis sur le PC du serveur, ca marche tout le temps que ce soit sous IE7 ou firefox mais quand je passe sur un poste client et que j'appelle la servlet, ca marche sous firefox mais pas sous IE, j'obtiens une jolie exception:
Code:
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
| ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.coyote.tomcat5.OutputBuffer.realWriteBytes(OutputBuffer.java:373)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:398)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:262)
at org.apache.coyote.tomcat5.OutputBuffer.writeByte(OutputBuffer.java:427)
at org.apache.coyote.tomcat5.CoyoteOutputStream.write(CoyoteOutputStream.java:64)
at com.baha.server.prt.core.FileDlServlet.doGet(FileDlServlet.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534) |
Je suis sous tomcat 5.0.28 et java 1.4
Voici le code utilisé pour envoyer le fichier stoqué sur le serveur au client: (sans les try/catch/finally)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
file = request.getParameter("file");
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment;filename=\"facture.pdf\"");
out = response.getOutputStream();
pdfFile = new File(file);
in = new FileInputStream(pdfFile);
int b;
while((b=in.read())!=-1){
out.write(b);
}
out.flush();
out.close();
in.close(); |
Voilà je suis à court d'idées pour expliquer ce phénomène... :(
Des idées de votre côté?
merci!
edit:
chose pouvant en éclairer certains (je l'espère)
après une "petite" scéance de débuggage j'ai vu ceci:
mon fichier fait 72ko
J'obtiens mon exception juste quand j'envoie le 32768ème byte (32k quoi)... alors que sous firefox celui-ci est bien reçu et ceci jusqu'au 72000ème byte...
D'où elle sort cette puissance de 2 et quel est le rapport avec mon problème???