当前位置: 代码迷 >> J2SE >> 手机 从 Servlet 下载文件 有关问题!
  详细解决方案

手机 从 Servlet 下载文件 有关问题!

热度:674   发布时间:2016-04-24 02:28:21.0
手机 从 Servlet 下载文件 问题!!急
IE从该servlet就能下载,但是手机WIFI从这里下载就不行,下载文件是.apk文件(安卓的应用),如何解决呢?谢谢

具体代码如下:

Java code
@Override    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException    {        try        {            // path是指欲下载的文件的路径。            String path = "D:\\apps\\Resource\\bin\\android\\android.apk";            File file = new File(path);            // 取得文件名。            String filename = file.getName();            // 取得文件的后缀名。            // String ext = filename.substring(filename.lastIndexOf(".") +            // 1).toUpperCase();            // 以流的形式下载文件。            InputStream fis = new BufferedInputStream(new FileInputStream(file));            byte[] buffer = new byte[fis.available()];            fis.read(buffer);            fis.close();            // 清空response//            response.reset();            // 设置response的Header            response.addHeader("Content-Disposition", "attachment;filename="                    + new String(filename.getBytes("utf-8"), "utf-8"));            response.addHeader("Content-Length", "" + file.length());            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());            response.setContentType("application/octet-stream");            toClient.write(buffer);  //这句手机访问的话就报错,错误在下面            toClient.flush();            toClient.close();        }        catch(IOException ex)        {            ex.printStackTrace();        }    }


报错:

Java code
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.append(ByteChunk.java:354)    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)    at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)    at java.io.FilterOutputStream.write(FilterOutputStream.java:80)    at com.entel.servlet.Servlet.doGet(Servlet.java:60)    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:298)    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)    at java.lang.Thread.run(Thread.java:619)Caused by: java.net.SocketException: Software caused connection abort: socket write error    at java.net.SocketOutputStream.socketWrite0(Native Method)    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)    at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:741)    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)    at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:765)    at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)    at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:574)    at org.apache.coyote.Response.doWrite(Response.java:560)    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)    ... 21 more
  相关解决方案