通过Cloud Endpoints将图像传输到Android App或从Android App传输到App Engine后端

时间:2013-11-14 01:11:21

标签: android image google-app-engine upload

我目前正在开发一款需要将图像传递到App引擎后端的应用程序。最初我计划直接通过端点发送图像(它们只有很小 - 最大100kb - 平均20kb)但是当通过端点将数据作为字节数组发送时,我收到一个JSON错误(来自其余的API),说明数据有一个无效的字符。有办法解决这个问题吗?

我的第二次尝试是使用BlobService并使用以下代码将上传URL返回给客户端:

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
UploadOptions uploadOptions = UploadOptions.Builder.withGoogleStorageBucketName("bucketname").maxUploadSizeBytes(1048576);              
String url = blobstoreService.createUploadUrl("/uploaded", uploadOptions);

然后在Android设备上使用HTTP帖子上传图片:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("data", new ByteArrayBody(data,"image/png","img.png"));
httppost.setEntity(entity);
String res = EntityUtils.toString( httpclient.execute(httppost).getEntity(), "UTF-8");

这似乎有效并且图像已上传。但是,我不知道如何获取此上传图像的blobkey。有人知道吗?此外,HTTP帖子的结果是404错误 - 因为“/ uploaded”页面不存在我猜?

第三,当手动输入blobkey并使用它返回并使用以下代码对服务URL进行映像时:

    private String getImage(){
        return getThumbUrl(new BlobKey("encoded_gs_key:ZGNpbWcxMy93czZwZ2lUeXdpY0xvZ2xtZGpHZ2dn")); 
    }

    private String getThumbUrl(BlobKey blobkey){       
        ServingUrlOptions options = ServingUrlOptions.Builder.withBlobKey(blobkey);
        try {
            return ImagesServiceFactory.getImagesService().getServingUrl(options);
        } catch(IllegalArgumentException e) {
            e.printStackTrace();
            return null;
        } catch(ImagesServiceFailureException e) {
            e.printStackTrace();
            return null;
        }
    }

我收到了图片的网址,但图片颜色全部搞砸了。我正在上传索引的png ...我不确定ImageService是否可以正确处理它们。如果它不能,我如何直接提供图像,即不通过ImageService,而是通过BlobstoreService.serve()?

以下是来自ImageService网址的结果图片的图片:http://i.imgur.com/EhfkJ9j.png

干杯, 本

1 个答案:

答案 0 :(得分:0)

关于blob键,当您创建上传URL时,您传递的参数包含上传后调用的appengine页面的名称。您需要实现该页面(“已上传”)https://developers.google.com/appengine/docs/java/blobstore/#Java_Uploading_a_blob