После использования ImagesService для преобразования загруженного изображения я хотел бы сохранить его обратно в новый файл Blob и сделать его доступным через getServingUrl()
, как это предусмотрено ImagesService.
Сохранение изображения вновый AppEngineFile, как описано здесь , работает нормально, и я могу открыть и просмотреть его локально с помощью сервера dev.
Однако при передаче blobKey для нового AppEngineFile в ImagesService.getServingUrl()
a
java.lang.IllegalArgumentException: Не удалось прочитать BLOB-объект.
Возникло исключение.Есть идеи, в чем может быть проблема?Это код, который я использую для преобразования и сохранения загруженного изображения (blobKey и blobInfo соответствуют загруженному файлу, а не вновь созданному).
/* Transform image in existing Blob file */
Image originalImage = ImagesServiceFactory.makeImageFromBlob(blobKey);
Transform verticalFlip = ImagesServiceFactory.makeVerticalFlip();
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image newImage = imagesService.applyTransform(verticalFlip, originalImage);
/* Store newImage in an AppEngineFile */
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile(blobInfo.getContentType());
FileWriteChannel writeChannel = fileService.openWriteChannel(file, true);
ByteBuffer buffer = ByteBuffer.wrap(newImage.getImageData());
writeChannel.write(buffer);
/* closeFinally assigns BlobKey to new file object */
writeChannel.closeFinally();
BlobKey newBlobKey = fileService.getBlobKey(file);
Редактировать:
Приведенный выше код является верным, проблема заключалась в сохранении строкового представления нового ключа BLOB-объекта с использованием newBlobKey.toString()
вместо newBlobKey.getKeyString()
.