如何从Android发送图像并在GAE上接收?

时间:2014-12-07 03:36:29

标签: java android python google-app-engine

我正在使用原生应用和云应用组件构建一个非常简单的项目。 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))

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

以下是从Android App到App引擎(Servlet Java)的响应。您应该使用多部分http请求:Photo don't uploaded correctly GCS App Engine

它不是Python,但我希望它可以帮到你!

相关问题