GAE: как можно получить доступ к данным / файлам, которые хранятся в хранилище BLOB-объектов GAE, с помощью внешней веб-службы, которая не развернута в GAE с использованием Java - PullRequest
0 голосов
/ 21 марта 2012

В GAE у меня есть приложение, которое хранит файлы в сервисе Blobstore GAE.После того, как данные сохранены, их также следует отправить во внешнюю веб-службу, не развернутую в GAE.Я использую Java.

Моей первой идеей было использование JAX-RPC (Java API для RPC на основе XML) и SAAJ (SOAP с Attachments API для Java), как описано в http://www.ibm.com/developerworks/xml/library/x-tippass/, но я не смогразверните инфраструктуру Axis2 в GAE, потому что я получил исключения сокетов (не разрешено в GAE).Идея состояла в том, чтобы отправить данные во внешний веб-сервис.

Во второй попытке я хотел получить данные из GAE, что означает доступ к файлу непосредственно в Blobstore с помощью внешнего веб-сервиса.В консоли администратора GAE можно скачать большие двоичные объекты.Поэтому я подумал, что могу сделать то же самое с моей внешней веб-службой, передав ключ большого двоичного объекта внешней веб-службе, чтобы использовать java.net.URL для извлечения моего файла, аналогично описанному здесь: http://code.google.com/intl/de-DE/appengine/docs/java/urlfetch/overview.html.Эта ссылка выглядит следующим образом:

String blobFileUrl = "https://appengine.google.com/blobstore/download?app_id=s~gae_app&key=" + gaeBlobKey;

Однако она не сработала, поскольку webservice / www-user должен пройти аутентификацию и авторизоваться для доступа к файлу.Насколько я знаю, Google не предоставляет Java API для входа в GAE из внешнего веб-сервиса.

Можно ли получить доступ к BLOB-объектам / данным GAE с помощью внешнего веб-сервиса, который не развернут наGAE, используя Java?Если да, то как это возможно?

1 Ответ

2 голосов
/ 21 марта 2012

Вы можете создать сервлет в своем приложении GAE, который просто обслуживает большой двоичный объект с заданным ключом большого двоичного объекта.

URL-адрес будет выглядеть примерно так:

http://appid.appspot.com/blobserve?blobKey=3asdfg324gdasdf

и ваш сервлет будет выглядеть так:

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException {
    BlobKey blobKey = new BlobKey(req.getParameter("blobKey"));
    blobstoreService.serve(blobKey, res);
}
...