Сначала я сохраняю изображение в Google Cloud Storage и устанавливаю тип mime на что-то вроде "image/png" и назову его случайным образом с файлом, заканчивающимся, например, ".png". Файлы, похоже, хранятся правильно. Я вижу их в средстве просмотра хранилища данных:
Но если я попытаюсь загрузить его снова с помощью com.google.appengine.api.images.ImagesService
и вызвать ImagesService.getServigUrl()
, он выдает ошибку:
java.lang.IllegalArgumentException: NOT_IMAGE: Failed to read image
Поэтому кажется, что это не образ. Но почему? Он имеет набор параметров mime, у него есть файл, заканчивающийся. Код выглядит так:
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image newImage = imagesService.applyTransform(crop, oldImage);
final GcsService gcsService =
GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
AppIdentityService appservice = com.google.appengine.api.appidentity.AppIdentityServiceFactory.getAppIdentityService();
GcsFilename fileName = new GcsFilename(appservice.getDefaultGcsBucketName(), Long.toString(random.nextLong(), 36)+"."+newImage.getFormat().toString().toLowerCase());
GcsFileOptions gcsOptions = new GcsFileOptions.Builder()
.mimeType("image/"+newImage.getFormat().toString().toLowerCase())
.acl("public-read").build();
GcsOutputChannel outputChannel =
gcsService.createOrReplace(fileName, gcsOptions);
ObjectOutputStream oout =
new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(newImage.getImageData());
oout.close();
ServingUrlOptions suo = ServingUrlOptions.Builder.withGoogleStorageFileName("/gs/"+fileName.getBucketName()+"/"+fileName.getObjectName()).secureUrl(true);
String s = imagesService.getServingUrl(suo);
System.out.println(s);
Возможно, это не тип изображения mime, который вы загрузили, проверьте тип mime загруженного файла.