Как бы я использовал blobstore для обработки изображений Android

Может кто-нибудь, пожалуйста, проясните это для меня. Я читаю страницу разработчиков о магазине больших двоичных объектов по адресу https://developers.google.com/appengine/docs/java/blobstore/overview. Кажется, я не могу понять процесс сохранения и извлечения больших двоичных объектов? Это звучит как

  • Android-приложение будет напрямую отправлять изображение в blobstore
  • после сохранения изображения хранилище больших двоичных объектов затем вернет ключ большого двоичного объекта на мой сервер, чтобы я мог поместить его в хранилище данных.

Это процесс? Может быть, это потому, что у меня был долгий день, но я просто не могу этого видеть. Если у кого-то есть пример, которым он не против поделиться, пожалуйста, опубликуйте его. Мне просто нужно сохранить изображения с Android в blobstore, а затем получить их с помощью blobkey или иным образом.

я уже посмотрел

Хоть убей, я не знаю, почему они не делают этого для меня.

Я полагаю, некоторые вопросы:

  • Как Android знает, куда отправить BLOB-объект? Я имею в виду, различает ли Google мои экземпляры хранилища больших двоичных объектов и экземпляры других людей, подобно тому, как он различает мои экземпляры хранилища данных? Другими словами, могу ли я перейти к движку приложения Applications Overview и просмотреть все большие двоичные объекты, принадлежащие моему приложению, так же, как в хранилище данных? Я полагаю, что полный работающий фрагмент кода мог бы помочь мне увидеть эти ответы.

Часть моей проблемы может заключаться в том, что я никогда не использовал сервлет. В настоящее время я использую Google Cloud Endpoint для своего API.


person learner    schedule 27.04.2013    source источник
comment
интересно, есть ли у вас рабочий код для этого решения?   -  person Jacek Kwiecień    schedule 10.04.2014


Ответы (2)


Ваше описание процесса верно. Единственный шаг, который вы пропустите, — это первый: серверная сторона вызывает blobstoreService.createUploadUrl(redirecturl) для создания URL-адреса для загрузки. Затем обработчик в redirecturl сохранит ключ большого двоичного объекта в хранилище данных.

person dragonx    schedule 27.04.2013
comment
Этот URL установлен навсегда или он динамический? Как и приложение для Android, должно вызывать его каждый раз, когда ему нужно сохранить большой двоичный объект, или я получаю его один раз, а затем сохраняю на клиенте и использую каждый раз, когда мне нужно отправить большой двоичный объект? - person learner; 27.04.2013
comment
это динамично. Эта функция создает новый URL-адрес для каждого большого двоичного объекта. Я не уверен, есть ли у Endpoints особый способ справиться с этим, но общий случай с Blobstore заключается в том, что вам нужно использовать createUploadUrl() каждый раз, когда вы хотите загрузить что-то в Blobstore. - person dragonx; 27.04.2013
comment
@dragonx, когда blobstore вызывает сервер через URL-адрес обратного вызова, как сервер узнает, для какого пользователя предназначен этот обратный вызов? - person Katedral Pillon; 27.04.2013

На самом деле есть два способа загрузки в blobstore:

Используя обработчик прямой загрузки:

  • Сервер получает уникальный одноразовый секретный URL-адрес загрузки через createUploadUrl(..) и отправляет этот URL-адрес клиенту.
  • Клиент использует multipart/form-data POST для загрузки данных на этот URL.
  • Плюс в том, что вы можете загружать большие файлы (> 32 МБ).

Использование blobstore FileService API, который устарел и не следует больше использовать:

  • Вы создаете свой собственный обработчик загрузки POST, куда клиент загружает данные.
  • Вы используете FileService API, поэтому сохраняйте данные в blobstore.
  • Недостатком является то, что вы можете загрузить максимум 32 МБ данных (общий лимит запросов GAE).
  • Положительным моментом является то, что у вас есть доступ к данным, поэтому вы можете редактировать содержимое, если это необходимо.
person Peter Knego    schedule 27.04.2013
comment
Спасибо за публикацию. +1. это полезно. - person learner; 28.04.2013