在android系统引起的异常HTTPS文件下载 [英] https file download in android causing exception
问题描述
我有一个servlet在那里我试图写一个文件到响应的OutputStream。
response.setContentType(应用程序/八位字节流);
字符串值=附件;文件名= \\+的appName +\\;
response.setHeader(内容处置,值);
response.setContentLength((int)的file.length());
response.setBufferSize(99999);
而((长度= fis.read(缓冲液))大于0){
sumBytes = sumBytes +长度;
os.write(缓冲液,0,长度);
}
os.flush();
fis.close();
这是工作的罚款,HTTP,但是当我尝试下载同一个文件通过HTTPS有SocketException异常。
我觉得只是请求后,HTTPS连接是越来越封闭。
Plase为此提供一个解决方案。
下面是个例外。
ClientAbortException:java.net.SocketException异常:残破的管道
在org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369)
在org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:439)
在org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
在org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
在org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
在org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
在com.mfino.appselector.DownloadApp.writeFile(DownloadApp.java:139)
在com.mfino.appselector.DownloadApp.doGet(DownloadApp.java:101)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:602)
在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)
在java.lang.Thread.run(Thread.java:662)
java.net.SocketException异常:引起管道中断
在java.net.SocketOutputStream.socketWrite0(本机方法)
在java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
在java.net.SocketOutputStream.write(SocketOutputStream.java:136)
在com.sun.net.ssl.internal.ssl.OutputRecord.writeBuffer(OutputRecord.java:297)
在com.sun.net.ssl.internal.ssl.OutputRecord.write(OutputRecord.java:286)
在com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:743)
在com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:731)
在com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
在org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:760)
在org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:359)
在org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:784)
在org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
在org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:593)
在org.apache.coyote.Response.doWrite(Response.java:560)
在org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
请,后logcat的消息。
同时刚刚盲拍,你就自签名的证书。
并<一个href=\"http://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https\">here.
I have a servlet where I am trying to write a file to the response outputstream.
response.setContentType("application/octet-stream");
String value = "attachment;filename=\"" + appName + "\"";
response.setHeader("Content-Disposition", value);
response.setContentLength((int) file.length());
response.setBufferSize(99999);
while ((length = fis.read(buffer)) > 0) {
sumBytes = sumBytes + length;
os.write(buffer, 0, length);
}
os.flush();
fis.close();
This is working fine for http, but when I try to download the same file over https there is a SocketException.
I think the https connections is getting closed just after the request.
Plase provide a solution for this.
Here is the exception.
ClientAbortException: java.net.SocketException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:439)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at com.mfino.appselector.DownloadApp.writeFile(DownloadApp.java:139)
at com.mfino.appselector.DownloadApp.doGet(DownloadApp.java:101)
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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
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:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at com.sun.net.ssl.internal.ssl.OutputRecord.writeBuffer(OutputRecord.java:297)
at com.sun.net.ssl.internal.ssl.OutputRecord.write(OutputRecord.java:286)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:743)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:731)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:760)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:359)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:784)
at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:593)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
Please, post logcat message. Meanwhile just blind shot, you've got self-signed certificate.
这篇关于在android系统引起的异常HTTPS文件下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!