Поворот изображения в GAE BlobStore

Я пытаюсь повернуть изображение в хранилище больших двоичных объектов, а затем сохранить его обратно в хранилище больших двоичных объектов, но не могу понять, как сохранить его обратно в хранилище больших двоичных объектов? Я нашел это, но похоже, что FileService API устарел, так что же мне использовать вместо этого? Вот мой код:

// Get image from blobstore
Image img = ImagesServiceFactory.makeImageFromBlob(new BlobKey(document.blobstoreKey));

// Rotate 90 degrees
Transform transform = ImagesServiceFactory.makeRotate(90);
img = ImagesServiceFactory.getImagesService().applyTransform(transform, img);

// HERE: How to save back to the blobstore?
...

person jjv360    schedule 19.03.2015    source источник
comment
Вам необходимо облачное хранилище, см. cloud.google.com/appengine/docs/java/googlecloudstorageclient.   -  person Igor Artamonov    schedule 19.03.2015


Ответы (1)


К сожалению, вы сталкиваетесь с одним из ограничений blobstore, как описано на странице https://cloud.google.com/appengine/docs/java/blobstore/ ...:

Приложение не может создавать или изменять значения Blobstore, кроме как через файлы, загруженные пользователем.

... и это именно то, что вы хотите сделать - создать значение blobstore, не заставляя пользователя загружать файл, а сохраняя byte[], возвращенный img.getImageData().

Если вы контролируете клиент (приложение Javascript в браузере), вы можете обойти это каким-то трюком, отправив байты в браузер и заставив Javascript немедленно развернуться и «загрузить» новое хранилище больших двоичных объектов. Но это действительно хакерский подход — и по своей сути медленный, добавляющий «туда и обратно» в браузер и обратно для потенциально больших данных изображения.

Скорее, на вашем месте я бы воспринял это как еще один стимул оставить blobstore и перейти в облачное хранилище Google, а именно https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/ .

С GCS вы можете, например, просто использовать метод службы createOrReplace, документированный по адресу https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/javadoc/ , передав ему ByteBuffer.wrap из byte[], и вуаля, все сделано за вас, просто, быстро, без осложнений.

person Alex Martelli    schedule 19.03.2015