我有来自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问题,希望我把所有内容都格式正确; - )