Hallo!
Ich will eine Datei von einem Servlet, welches auf meinem TomcatServer gehosted wird, herunterladen.
Problem:
Von einem normalen Computer aus gehts einwandfrei, doch bei einem Android-Handy schlägt der Download immer fehl, egal welcher Dateityp.
Das Servlet wirft folgende Exception:
ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:293)
at org.apache.catalina.connector.OutputBuffer.writeByte(OutputBuffer.java:399)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:77)
at org.yournamehere.server.DownloadServlet.processRequest(DownloadServlet.java:65)
at org.yournamehere.server.DownloadServlet.doGet(DownloadServlet.java:110)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Servlet-Code:
//in der processRequest methode:
//setzen der http-header
String contentType = mimeTypesMap.getContentType(file);
response.setContentType(contentType);
response.addHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
response.setContentLength((int) file.length());
//datei rausschreiben
FileInputStream fin = new FileInputStream(file);
OutputStream out = response.getOutputStream();
int wtf;
while ((wtf = fin.read()) != -1) { //-1 = end of file
out.write(wtf);
}
fin.close();
out.close();
am Android-Handy habe ich den Standard-Browser sowie den Dolphin-Browser verwendet, beide verursachten den Fehler.
Ich hab ja sowas von keine Ahnung wo der Fehler versteckt ist, hoffentlich könnt ihr mir helfen.
Liebe Grüße