【发布时间】:2015-11-13 11:04:52
【问题描述】:
我有一个小 js 程序,可以将图像上传到我的 gcs 存储桶。如果发生这种情况,我的 gcs 会向谷歌应用引擎的 servlet 发送通知。
到目前为止,一切都很好。 现在我的 servlet 应该从 gcs 读取并下载刚才上传的文件。然后我想将其解析为图像对象并调整图像大小。新图像应上传到另一个 gcs 存储桶。
要与 gcs 通信,我使用 gcs 客户端库。
GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
GcsFilename filename = new GcsFilename("bucket_name", "image_name");
GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(filename, 0, 1024 * 1024);
try ( ObjectInputStream inputStream = new ObjectInputStream(Channels.newInputStream(readChannel))){
inputStream.readObject();
log(inputStream.getClass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我也尝试将其保存在字节数组中,但错误始终相同
来自 servlet 的未捕获异常 java.io.StreamCorruptedException:无效的流标头:FFD8FFE0
我做错了什么?我是不是忘记了什么? 感谢您的帮助。
【问题讨论】:
-
使用 App Engine 的 ImageService URL 来提供调整大小的图像可能比调整大小和保存不同版本更简单、更便宜。
-
感谢您的快速回答,您有详细解释的链接吗?
-
尤其是在使用 javascript 从浏览器客户端将数据保存到 blobstore 时
-
查看此页面上的 getServingURL() 方法:cloud.google.com/appengine/docs/java/images/…。您可以将对此方法的调用包装在云端点 API 方法中,并从 javascript 客户端调用它。
标签: java google-app-engine google-cloud-storage