【问题标题】:how to get a image from google cloud storage in java?如何从Java中的谷歌云存储中获取图像?
【发布时间】: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


【解决方案1】:

使用建议的价格一样的 ImageService:

GcsFilename gcsFilename = new GcsFilename(bucketDefault, objectName);
String filename = String.format("/gs/%s/%s", gcsFilename.getBucketName(), gcsFilename.getObjectName());
String servingUrl = imageService.getServingUrl(ServingUrlOptions.Builder.withGoogleStorageFileName(filename).secureUrl(true));

然后,您可以使用these parameters 即时转换提供的图像。

【讨论】:

  • GcsService 在带有应用引擎模块的 android studio 中找不到/可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多