我有一个小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
答案 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动态转换所投放的图片。