Google App Engine代码在部署时有效,但在开发服务器中无效

时间:2012-10-13 13:32:20

标签: java google-app-engine blobstore javax.imageio

任何人都有过这种情况吗?这与在dev中工作并在部署中失败相反。

我的网络应用在部署中成功使用ImagesServiceImpl.getServingUrl(),但在开发服务器中没有。

我在这里查看我的开发环境配置中是否缺少已部署的环境:https://developers.google.com/appengine/docs/java/config/appconfig#About_appengine_web_xml

另见:https://developers.google.com/appengine/docs/java/images/overview#Development_Server

当我运行代码给我带来麻烦时,我的控制台会发生什么:

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解码器插件,但这应该不是问题,因为我只处理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 实体类型。

感谢您的任何意见!

1 个答案:

答案 0 :(得分:1)

文档:Java开发服务器使用ImageIO框架来模拟Image服务。不支持“我很幸运”的照片增强功能。仅当安装了合适的解码器插件时才支持WEBP图像格式。例如,可以使用Java VP8解码器插件。

您安装了最新的1.7.2。在开发服务器中使用getServingUrl修复了一些问题。