Google App EngineCode работает при развертывании, но не на сервере разработки
У кого-нибудь когда-нибудь такое случалось? Это противоположность работы в dev и неудачи в развертывании.
Мое веб-приложение успешно использует ImagesServiceImpl.getServingUrl() при развертывании, но не на сервере разработки.
Я посмотрел здесь, чтобы увидеть, не было ли чего-то не хватает в конфигурации моей среды разработки, которую имеет развернутая среда: https://developers.google.com/appengine/docs/java/config/appconfig
Также смотрите здесь: https://developers.google.com/appengine/docs/java/images/overview.
Вот что происходит в моей консоли, когда я запускаю код, доставляющий мне проблемы:
Oct 13, 2012 8:40:33 AM com.google.appengine.api.images.dev.LocalImagesService init
WARNING: No image reader found for format "ico". An ImageIO plugin must be installed to use this format with the DevAppServer.
Oct 13, 2012 8:40:33 AM com.google.appengine.api.images.dev.LocalImagesService init
WARNING: No image reader found for format "tif". An ImageIO plugin must be installed to use this format with the DevAppServer.
Oct 13, 2012 8:40:33 AM com.google.appengine.api.images.dev.LocalImagesService init
WARNING: No image reader found for format "webp". An ImageIO plugin must be installed to use this format with the DevAppServer.
Oct 13, 2012 8:40:33 AM com.google.appengine.api.images.dev.LocalImagesService init
WARNING: No image writer found for format "webp". An ImageIO plugin must be installed to use this format with the DevAppServer.
Oct 13, 2012 8:40:34 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /upload
java.lang.IllegalArgumentException: Failed to read image
at com.google.appengine.api.images.ImagesServiceImpl.getServingUrl(ImagesServiceImpl.java:282)
Хотя у меня нет плагина для webp, ico и tif decoder, это не должно быть проблемой, поскольку я работаю ТОЛЬКО с изображениями в формате jpeg.
Вот часть кода:
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile newBlob = fileService.createNewBlobFile("image/jpeg");
// Create a new Blob file with mime-type "image/jpeg"
byte[] buffer = new byte[4096]; // 4MB
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(newBlob, lock);
// increase the buffer size as you are reading from the
// input stream. Read the input stream into buffer
for (int n; (n = stream.read(buffer)) != -1; ){
writeChannel.write(ByteBuffer.wrap(buffer));
}
stream.close();
writeChannel.closeFinally();
BlobKey blobKey = fileService.getBlobKey(newBlob);
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Как вы можете сказать, я использую код более низкого уровня для получения загрузки от пользователя (вместо использования getUploadUrl.
Одно из различий между моим хранилищем данных при развертывании и моим хранилищем данных в dev заключается в том, что я вижу вид сущности BlobFileIndex в хранилище данных для моего dev.
Спасибо за любой вклад!
1 ответ
Из документов: Сервер разработки Java использует инфраструктуру ImageIO для имитации службы изображений. Функция улучшения фото "Мне повезет" не поддерживается. Формат изображения WEBP поддерживается только в том случае, если установлен подходящий плагин декодера. Например, можно использовать плагин декодера Java VP8.
Установили ли вы последнюю версию 1.7.2. Были некоторые проблемы, исправленные с getServingUrl на сервере разработки.