「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」を使用していました。瓶を変えると問題が解決しました!