IE从该servlet就能下载,但是手机WIFI从这里下载就不行,下载文件是.apk文件(安卓的应用),如何解决呢?谢谢具体代码如下:@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();
} }
报错: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

解决方案 »

  1.   

    IP?手机的ip和电脑的ip联起来了吗
      

  2.   

    回楼上 肯定是连起来了 因为jsp访问都好好的 这个不会怀疑 都能调试呢
      

  3.   

    socket write error是不是连接错误啊?
      

  4.   


    不知道 IO 错误 SOCKET错误之类 反正有问题
      

  5.   


    863k的一个.apk文件 不可能过大 手机用的安装程序
      

  6.   

    对了!你的是android项目吧?有没有文件的读写权限?
      

  7.   

    楼主把工程贴出来,我是搞android的,不知道能不能帮上你
      

  8.   

    代码就在上面了。手机端就是浏览器访问而已,服务器端就是TOMCAT下的一个servlet类,代码都给你们了。
      

  9.   

    如果是apk文件的话,在电脑下载是没问题的,但是手机浏览器下载的时候貌似是多线程去访问的另外 最最最最最重要的一点 你需要加下面这行东西,不然手机下载了后不能安装
    response.setContentType("application/vnd.android.package-archive");
      

  10.   

    附上代码片段String filedownload = "xxxxxx";//文件path
    response.addHeader("Content-Disposition", "attachment;filename="
    + filedisplay);
    java.io.OutputStream outp = null;
    java.io.FileInputStream in = null;
    try {
    outp = response.getOutputStream();
    in = new java.io.FileInputStream(filedownload);
    byte[] b = new byte[102400];
    int i = 0;
    while ((i = in.read(b)) > 0) {
    outp.write(b, 0, i);
    }
    outp.flush();
    } catch (Exception e) {
    } finally {
    if (in != null) {
    in.close();
    in = null;
    }
    if (outp != null) {
    outp.close();
    outp = null;
    }

    out.clear();
    out = pageContext.pushBody();
      

  11.   

    貌似是这个问题 if (in != null) {
            in.close();
            in = null;
        }
        if (outp != null) {
            outp.close();
            outp = null;
        }

    out.clear();
    out = pageContext.pushBody();补充下,这些代码是写在jsp页面里的 可能找不到pageContext.pushBody(); 这个就不清楚了 没试过Servlet