通过Android上传文件给出503,但在REST客户端中工作正常

时间:2015-07-18 17:48:22

标签: php android file-upload

我有一个用PHP编写的Web服务(在LAMP堆栈上运行),用于上传文件并对其进行处理。

当我从我的Android应用程序调用它时,服务器返回错误503.

在Android中,如果我删除文件上传部分并传递其他参数,它就可以了!

如果我评论所有代码,它仍会出错。所以看起来由于某种原因,通过Android上传的文件无法正常工作!

注意:它一直工作到上周。上周我将我的网络服务器移动到新主机(不同的IP) - 这就是全部。

如果我从Chrome Rest客户端测试,它的效果非常好!!!

不同服务器上的相同脚本(不同的域名和IP)可以正常工作。

可能是什么错误? 为什么只有当我从Android应用程序调用时才会失败!!

以下是Android代码:

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(web_url);

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

InputStream is = PBAApplication.getInstance().getContext().getContentResolver().openInputStream(fileURI);
InputStreamBody isb = new InputStreamBody(is, fileName);

builder.addPart("type", new StringBody("APPM"));
builder.addPart("file", isb);

httpPost.setEntity(builder.build());

// Execute HTTP Request
HttpResponse response = httpClient.execute(httpPost);

服务器错误日志显示:

(32)Broken pipe: [client 219.74.158.38:21214] AH01075: Error dispatching request to : (sending stdin)

1 个答案:

答案 0 :(得分:0)

您可以采取一些措施进行问题排查:

  1. 修改服务器以转储错误。
  2. 尝试将正文内容类型设置为application / x-www-form-urlencoded
  3. 确保网址正确(http vs https)。
  4. 查看其余客户端中的Cookie,并确保您的标题在应用中匹配。
  5. 要记录通过HttpClient的所有流量,请使用以下终端命令:

    //        adb shell setprop log.tag.org.apache.http VERBOSE
    //        adb shell setprop log.tag.org.apache.http.wire VERBOSE
    

    将此添加到您的Application类:

        java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
    java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
    System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.SimpleLog");
    System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
    System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "debug");
    System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "debug");
    System.setProperty("http.keepAlive", "false");