我试图旋转blobstore中的图像,然后将其保存回blobstore,但我无法弄清楚如何将其保存回blobstore?我确实找到了this,但看起来不推荐使用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?
...
答案 0 :(得分:0)
不幸的是,您已经遇到了https://cloud.google.com/appengine/docs/java/blobstore/所记录的blobstore限制...:
除了通过,应用程序无法创建或修改Blobstore值 用户上传的文件。
......而这正是您想要做的 - 创建blobstore值,而不是让用户上传文件,而是保存byte[]
返回的img.getImageData()
}。
如果您控制了客户端(浏览器上的Javascript应用程序),您可以解决这个问题,将字节发送到浏览器并立即转换Javascript并上传"上传&#34 ;新的blobstore。但这真的很糟糕 - 本质上很慢,增加了一次往返旅行"到浏览器并返回可能的大图像数据。
相反,在你的鞋子里,我将此作为另一个诱因,让blobstore落后并转而转向谷歌云存储 - 特别是https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/。
使用GCS,您可以使用https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/javadoc/中记录的服务createOrReplace
方法,将ByteBuffer.wrap
传递给byte[]
,并且瞧,这一切都是为你完成的,简单,快速,没有并发症。