从Android相机上传到Python AppEngine(webapp)

时间:2011-03-26 23:51:32

标签: python android google-app-engine httpclient android-camera

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

问题:我一直在服务器端获取空的HTTP请求参数。

我的主要方法是Apache HttpClient:

1)Android 2.x不包含多部分w /二进制文件所需的MultiPartEntity类。所以我已经将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 args),一切正常,mydescription参数出现。

6)我设置了一个PHP服务器并尝试发布: POST适用于PHP!

7)关于HttpClient发送的格式的一些原因导致webapp / webob / wsgi / cgi.FieldStorage或其他问题。我无法弄清楚它在哪里破碎。

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

谢谢大家!

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

0 个答案:

没有答案