В настоящее время я работаю над приложением, которое требует, чтобы изображения были переданы в исходный код приложения и из него. Первоначально я планировал отправлять изображения (они только небольшие - макс. 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
Чирза, Бен
Где вы хотите получить ключ blob? Настройте URL-адрес загрузки блоб-магазина так, чтобы он перезвонил вашему appengine, там он получит ключ. –