1

「GWT アップロード」( https://code.google.com/p/gwtupload/ )を使用して Google App Engine にファイルをアップロードしたいと考えています。アップロード中にエラーが発生します。サーブレットとしてUploadAction、次のビルドを使用します。gwtupload.server.gae.AppEngineUploadAction

サーブレットは、web.xml で次のように構成されます。

<context-param>
    <!-- max size of the upload request -->
    <param-name>maxSize</param-name>
    <param-value>3145728</param-value>
</context-param>
<context-param>
    <!-- Useful in development mode to slow down the uploads in fast networks. 
        Put the number of milliseconds to sleep in each block received in the server. 
        false or 0, means don't use slow uploads -->
    <param-name>slowUploads</param-name>
    <param-value>200</param-value>
</context-param>

<servlet>
    <servlet-name>uploadServlet</servlet-name>
    <!-- This is the default servlet, it puts files in session -->
    <servlet-class>gwtupload.server.gae.AppEngineUploadAction</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>uploadServlet</servlet-name>
    <url-pattern>*.gupld</url-pattern>
</servlet-mapping>

アップロード中、プログレス バーが数パーセント進み、次のエラーが表示されます。

エラーメッセージ

しかし、ログにはそれ以上の詳細はありません。

エラー メッセージにはgwtupload.server.gae.MemCacheFileItemFactory$CacheableFileItem、メソッドを持つクラスが表示されますsetHeader()。そのクラスのメソッドが見つからないので、それは奇妙です。ここで何が起こっているのですか?

編集: これは基本的に私が使用するすべてのカスタムコードです。サーバー側では、組み込みのgwtupload.server.gae.AppEngineUploadActionサーブレットを使用します。

package com.uploadtest.client;

import gwtupload.client.IUploadStatus.Status;
import gwtupload.client.IUploader;
import gwtupload.client.IUploader.UploadedInfo;
import gwtupload.client.MultiUploader;
import gwtupload.client.PreloadedImage;
import gwtupload.client.PreloadedImage.OnLoadPreloadedImageHandler;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.RootPanel;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class GWTUploadTest2 implements EntryPoint {


    // A panel where the thumbnails of uploaded images will be shown
    private FlowPanel panelImages = new FlowPanel();

    public void onModuleLoad() {
        // Attach the image viewer to the document
        RootPanel.get("thumbnails").add(panelImages);

        // Create a new uploader panel and attach it to the document
        MultiUploader defaultUploader = new MultiUploader();
        RootPanel.get("default").add(defaultUploader);

        // Add a finish handler which will load the image once the upload finishes
        defaultUploader.addOnFinishUploadHandler(onFinishUploaderHandler);
    }

    // Load the image in the document and in the case of success attach it to the viewer
    private IUploader.OnFinishUploaderHandler onFinishUploaderHandler = new IUploader.OnFinishUploaderHandler() {
        public void onFinish(IUploader uploader) {
            if (uploader.getStatus() == Status.SUCCESS) {

                new PreloadedImage(uploader.fileUrl(), showImage);

                // The server sends useful information to the client by default
                UploadedInfo info = uploader.getServerInfo();
                System.out.println("File name " + info.name);
                System.out.println("File content-type " + info.ctype);
                System.out.println("File size " + info.size);

                // You can send any customized message and parse it 
                System.out.println("Server message " + info.message);
            }
        }
    };

    // Attach an image to the pictures viewer
    private OnLoadPreloadedImageHandler showImage = new OnLoadPreloadedImageHandler() {
        public void onLoad(PreloadedImage image) {
            image.setWidth("75px");
            panelImages.add(image);
        }
    };

}

それに加えて、次のjarをクラスパスに追加しました:

  • log4j-1.2.17.jar
  • gwtupload-gae-0.6.6.jar
  • gwtupload-0.6.6.jar
  • commons-fileupload-1.3.jar
  • commons-io-2.4.jar

また、サンプル プロジェクト全体を圧縮して、ここにアップロードしました。

https://skydrive.live.com/redir?resid=60B826E451F52B4D!118&authkey=!ALa1n2mL2sRR0wU

編集2:

マノロが指摘したように、「commons-fileupload-1.2.1.jar」の代わりに「commons-fileupload-1.3.jar」を使用していました。瓶を変えると問題が解決しました!

4

1 に答える 1

2

問題は、使用している commons-fileupload のバージョンにあります。gwtupload のドキュメントで指摘されているバージョン 1.2.1 に変更してください。

1.2.2 でも動作するはずですが、1.3 を使用するには、gwtupload で提供される UploadListeners にない新しいメソッド (setHeaders) が必要です。

プロジェクトでターゲット Java (JDK 準拠) を 1.6 に変更する必要があります。これは、1.7 で実行されますが、問題を回避するために GWT でサポートされる最後の Java であるためです。

于 2013-08-01T08:50:50.943 に答える