旋转GAE Blob存储中的图像



我试图旋转Blob存储区中的图像,然后将其保存回Blob存储区,但我不知道如何将其保存回到Blob存储区?我确实发现了这一点,但看起来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?
...

不幸的是,您遇到了blobstore的一个限制,如https://cloud.google.com/appengine/docs/java/blobstore/:

应用程序不能创建或修改Blob存储值,除非通过用户上传的文件。

这正是您想要做的——创建blobstore值,而不是让用户上传文件,而是保存img.getImageData()返回的byte[]

如果你控制着客户端(浏览器上的Javascript应用程序),你可以破解一些技巧,将字节发送到浏览器,让Javascript立即转身"上传"新的blobstore。但这真的很麻烦——而且速度天生就很慢,给浏览器增加了一个"往返",然后返回潜在的大图像数据。

相反,站在你的立场上,我认为这是离开blobstore转而使用谷歌云存储的又一个诱因——特别是https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/。

例如,使用GCS,您可以只使用服务的createOrReplace方法,该方法记录在https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/javadoc/,传递给它一个byte[]ByteBuffer.wrap,瞧,这一切都为你完成了,简单、快速,没有并发症。

最新更新