2

誰でもこれが起こったことがありますか?これは、dev で作業してデプロイで失敗するのとは逆です。

私の Web アプリは、デプロイでは正常に 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.

デプロイメントのデータストアと開発のデータストアの違いの 1 つは、開発のデータストアにBlobFileIndexエンティティの種類が表示されることです。

ご意見ありがとうございます。

4

1 に答える 1

1

ドキュメントから: Java 開発サーバーは、ImageIO フレームワークを使用して Image サービスをシミュレートします。「I'm Feeling Lucky」写真補正機能はサポートされていません。WEBP 画像形式は、適切なデコーダ プラグインがインストールされている場合にのみサポートされます。たとえば、Java VP8 デコーダ プラグインを使用できます。

最新の 1.7.2 をインストールしましたか。開発サーバーの getServingUrl でいくつかの問題が修正されました。

于 2012-10-13T13:46:09.730 に答える