1

我有两个来自 Android 相机服务的 byte[] 数组。我想将它们和一些参数发布到我的 AppEngine 服务器,运行 python webapp 框架。

问题:我不断在服务器端收到空的 HTTP 请求参数。

我的主要方法是 Apache HttpClient:

1) Android 2.x 不包括 MultiPartEntity 类,这是多部分 w/二进制文件所必需的。所以我在构建路径中添加了 httpmime-4.0.1.jar 和 apache-mime4j-0.6.1.jar 。

2)Android方面,我正在做这样的POST:

public String post(String URI, byte[] jpeg, String description) {
    // Setup MultiPartEntity
    MultipartEntity args = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    args.addPart("mydescription", new StringBody(description));

    // Now add the file
    InputStream s1 = new ByteArrayInputStream(jpeg);
    args.addPart("myfile", new InputStreamBody(s1, "image/jpeg", "1.jpeg"));

    HttpClient httpclient = new DefaultHttpClient();
    // HTTP 1.1 is much faster with HttpClient, same issues w/o it  
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

    HttpPost httpost = new HttpPost(URI);
    httpost.setEntity(args);

    HttpResponse response = httpclient.execute(httpost);

    // blah blah blah, process response
}

3) Python AppEngine 方面,我的处理程序如下所示:

class UploadHandler(webapp.RequestHandler):
    def post(self, request):
        logging.info(self.request.arguments())
        logging.info(self.request.POST)

4) 参数为空 -> 将空数组打印到日志中。webob的下层self.request._request__body()也是空的。坏兆头!

5)如果我不将 InputStreamBody 添加到 MultipartEntity(仅 StringBody 参数),一切正常,并且 mydescription 参数出现。

6)我设置了一个 PHP 服务器并尝试发布:POST 与 PHP 一起工作!

7) HttpClient 发送的格式导致 webapp/webob/wsgi/cgi.FieldStorage 或某些问题。我不知道它在哪里坏了。

8) 我还尝试使用 URLConnection 根据 RFC 2388 编写原始 http multipart/form,结果相似。什么 RFC 是 webapp/webob/wsgi/whatever 以下?

谢谢大家!

这是我的第一个主要的 stackoverflow 问题,希望我已经正确格式化了所有内容;-)

4

0 回答 0