我正在使用原生应用和云应用组件构建一个非常简单的项目。 Android应用程序只需拍照,然后通过POST将其上传到URL。然后,云应用程序将显示收到的照片,这些照片存储在GAE数据存储区中。
目前,Android应用似乎正确发送照片,它从服务器接收HTTP OK。但是,当我去看云应用程序上的图像时,我没有得到一个图像,它似乎是一个空白的条目。
我不确定此时我的Android应用程序组件是否无法正确发送图像,或者云应用程序组件是否无法接收它。通过使用发布到上传网址的简单表单,我已经能够成功测试图片可以上传,这非常有用。
我唯一看到的是,Android代码在任何时候都没有设置标题名称“照片”并将其分配给照片的数据。但是,我似乎无法弄清楚如何设置,我不相信这是唯一的问题。
我使用此页面来帮助发送文件的安卓代码:How to send a file in Android from mobile to server using http?
这是重要的Android代码:
private class SendPhotoTask extends AsyncTask<File, Void, Void> {
@Override
protected Void doInBackground(File... photoFile) {
if (photoFile != null) {
String urlToConnect = "http://example.com/upload";
// Use a static file for testing
File photoFile2 = new File("/storage/emulated/0/Pictures/PNG_20141206_190223_-1388180531.png");
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(urlToConnect);
InputStreamEntity reqEntity = new InputStreamEntity(
new FileInputStream(photoFile2), -1);
reqEntity.setContentType("binary/octet-stream");
reqEntity.setChunked(true); // Send in multiple parts if needed
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
Log.d(DEBUG_TAG, response.getStatusLine().toString());
} catch (Exception e) {
Log.d(DEBUG_TAG, "Exception Caught: " + e);
}
}
return null;
}
}
使用以下命令执行SendPhotoTask类:
new SendPhotoTask().execute(photoFile);
这是服务器上的非常简单的代码(使用webapp2用Python编写),它接受我的图像:
class Gallery(BaseRequestHandler):
def post(self):
gallery_name = self.request.get('gallery_name',
DEFAULT_GALLERY_NAME)
greeting = Photo(parent=gallery_key(gallery_name))
greeting.photo = base64.b64encode(str(self.request.get('photo')))
greeting.put()
query_params = {'gallery_name': gallery_name}
self.redirect('/?' + urllib.urlencode(query_params))
我在这里做错了什么?
答案 0 :(得分:0)
以下是从Android App到App引擎(Servlet Java)的响应。您应该使用多部分http请求:Photo don't uploaded correctly GCS App Engine
它不是Python,但我希望它可以帮到你!