2013-11-14 5 views
2

В настоящее время я работаю над приложением, которое требует, чтобы изображения были переданы в исходный код приложения и из него. Первоначально я планировал отправлять изображения (они только небольшие - макс. 100 кб - средний 20 кбит) непосредственно через конечную точку, однако при отправке данных в виде байтового массива через конечную точку я получаю ошибку JSON (из остального API), заявляющую, что данные имеет недопустимый символ. Есть ли способ обойти это?Передача изображений в/из приложения Android через облачные конечные точки в исходный код App Engine

Моя вторая попытка была использовать использовать BlobService и возвращает URL загрузки к клиенту, используя следующий код:

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

Затем с помощью 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; 
     } 
    } 

Я получаю URL изображения однако цвета изображения все перепутались. Я загружаю индексированные pngs ... Я не уверен, правильно ли ImageService справляется с ними. Если это не так, как мне обращаться с изображением напрямую, то есть не через ImageService, а через BlobstoreService.serve()?

Вот изображение полученного изображения с ImageService URL: http://i.imgur.com/EhfkJ9j.png

Чирза, Бен

+0

Где вы хотите получить ключ blob? Настройте URL-адрес загрузки блоб-магазина так, чтобы он перезвонил вашему appengine, там он получит ключ. –

ответ

Смежные вопросы