如何从java中的谷歌云存储中获取图像?

时间:2015-11-13 11:04:52

标签: java google-app-engine google-cloud-storage

我有一个小js程序,它将图像上传到我的gcs存储桶。如果发生这种情况,我的gcs会向google app engine上的servlet发送通知。

到目前为止,这么好。 现在我的servlet应该从gcs读取并下载刚刚上传的文件。然后我想将其解析为图像对象并调整图像大小。新图像应上传到另一个gcs存储桶。

要与gcs通信我使用gcs客户端lybrary。

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

我做错了什么?我忘记了什么吗? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

使用价格建议的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动态转换所投放的图片。