Завъртане на изображение в GAE BlobStore

Опитвам се да завъртя изображение, което е в blobstore и след това да го запазя обратно в blobstore, но не мога да разбера как да го запазя обратно в blobstore? Намерих това, но изглежда, че API на FileService е остарял, така че какво да използвам вместо това? Ето моят код досега:

// 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 Storage, вижте 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. Но това е наистина хакерско -- и по своята същност бавно, добавяйки "обиколка" до браузъра и обратно за потенциално големи данни за изображения.

По-скоро на ваше място бих приел това като още един стимул да изоставя 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