FQueiros Posted April 21, 2015 at 11:38 AM Report Share #581570 Posted April 21, 2015 at 11:38 AM (edited) Bom dia, Eu tenho uma aplicação web e nela criei uma servlet simples, só com uma função para fazer o dowload de um ficheiro e fazer o stream dos dados para o cliente através do output da resposta. O problema é o seguinte, quando eu tento executar esta servlet num browser desktop funciona bem sem erros, consigo fazer o download do ficheiro ou renderiza-lo no browser. Mas quando eu tento aceder à servlet por exemplo no browser de um tablet android devolve-me a seguinte exceção: java.net.SocketException: Connection reset by peer: socket write error java.net.SocketOutputStream.socketWrite(Native Method) java.net.SocketOutputStream.write(SocketOutputStream.java(Compiled Code)) com.ibm.ws.io.Stream.write(Stream.java(Compiled Code)) com.ibm.ws.io.WriteStream.flushMyBuf(WriteStream.java(Inlined Compiled Code)) com.ibm.ws.io.WriteStream.flush(WriteStream.java(Inlined Compiled Code)) com.ibm.ws.http.ResponseStream.flush(ResponseStream.java(Compiled Code)) com.ibm.ws.io.WriteStream.flush(WriteStream.java(Compiled Code)) com.ibm.ws.webcontainer.http.HttpConnection.flush(HttpConnection.java(Inlined Compiled Code)) com.ibm.ws.webcontainer.srp.SRPConnection.flush(SRPConnection.java(Compiled Code)) com.ibm.ws.webcontainer.srt.SRTOutputStream.flush(SRTOutputStream.java(Compiled Code)) com.ibm.ws.webcontainer.srt.BufferedServletOutputStream.flushBytes(BufferedServletOutputStream.java(Compiled Code)) com.ibm.ws.webcontainer.srt.BufferedServletOutputStream.write(BufferedServletOutputStream.java(Compiled Code)) java.io.BufferedOutputStream.write(BufferedOutputStream.java(Compiled Code)) mynet.presentation.servlets.TestesVD.sendFile(TestesVD.java:765) mynet.presentation.servlets.TestesVD.doGet(TestesVD.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code)) com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code)) com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code)) com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code)) com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code)) com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code)) com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code)) com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java(Compiled Code)) com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code)) com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code)) com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code)) com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code)) com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code)) com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code)) com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code)) com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code)) com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code)) com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code)) com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code)) com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code)) Código para download do ficheiro: private void sendFile(String filePathName, HttpServletResponse response, boolean forceSave) { String disposition = forceSave ? "attachment" : "inline"; OutputStream out = null; BufferedInputStream fileInput=null; try{ File dataFile=new File(filePathName); if(!dataFile.exists( )){ filePathName = new String( filePathName.getBytes("ISO-8859-1"), "UTF-8"); dataFile = new File(filePathName); } fileInput=new BufferedInputStream(new FileInputStream(dataFile)); //long fileSize=dataFile.length(); Obtenção do tamanho do ficheiro if( fileInput != null ) { out = new BufferedOutputStream(response.getOutputStream()); String contentType = getServletConfig().getServletContext().getMimeType( filePathName ); if( contentType == null ){ contentType = "application/unknown"; } System.out.println("disposition: "+disposition+" contentType: "+contentType+" out: "+out); response.setHeader("Content-Disposition", disposition + "; filename=\"" + dataFile.getName() + "\""); response.setContentType(contentType); System.out.println("Vai escrever out: "+out); final byte data[] = new byte[1024]; int c; /*while(( c = fileInput.read() ) != -1){ //Escreve do buffer de entrada (fonte) para o buffer que vai conter o ficheiro (destino) System.out.println(c); out.write( c ); }*/ while ((c = fileInput.read(data, 0, 1024)) != -1) { System.out.println(c); out.write(data, 0, c); } } }catch (FileNotFoundException e) { e.printStackTrace(); System.err.println("Erro ao enviar ficheiro:"+filePathName+"." ); }catch (Exception e0) { e0.printStackTrace(); System.err.println("Erro ao enviar ficheiro:"+filePathName+". " + e0.getLocalizedMessage()); } if(fileInput != null){ try { fileInput.close(); System.out.println("fecha o input"); }catch( Exception e1 ) { System.out.println("Erro ao fechar o input"); MyNetLog.sendErro("-> ERROR:Ocorreu uma exepção ao fechar o objeto fonte "+e1.getLocalizedMessage()); } } if(out != null){ try { System.out.println("fecha o output"); out.close(); } catch( Exception e2 ) { System.out.println("Erro ao fechar o output"); e2.printStackTrace(); //MyNetLog.sendErro("-> ERROR:Ocorreu uma exepção ao fechar o objeto destino "+e2.getLocalizedMessage()); } } } Obrigado. Filipe Queirós Edited April 21, 2015 at 01:38 PM by apocsantos geshi Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now