首页 文章

GWT上传无法通过App Engine

提问于
浏览
1

我想使用"GWT Upload"(https://code.google.com/p/gwtupload/)向Google App Engine提供文件上传 . 在上传过程中,我收到了一个错误 . 作为 UploadAction servlet我使用内置: gwtupload.server.gae.AppEngineUploadAction

servlet通过以下方式在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>

在上载过程中,进度条会进展一些百分比,然后显示以下错误:

error message

但是日志中没有更多细节 .

该错误消息显示类 gwtupload.server.gae.MemCacheFileItemFactory$CacheableFileItem ,方法为 setHeader() . 那个's strange because I can't在那个类中找到了方法 . 这里发生了什么事?

Edit: 这基本上是我使用的所有自定义代码 . 在服务器端,我使用 gwtupload.server.gae.AppEngineUploadAction servlet中的内部版本 .

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 添加到我的clath路径:

  • 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

Edit 2:

就像Manolo指出的那样:我使用的是“commons-fileupload-1.3.jar”而不是“commons-fileupload-1.2.1.jar” . 更改jar修复了我的问题!

1 回答

  • 2

    问题出在您正在使用的commons-fileupload的版本中,将其更改为版本1.2.1,这是gwtupload documentation中指向的版本 .

    它也应该与1.2.2一起使用,但是使用1.3需要新方法(setHeaders),这些方法不在gwtupload提供的UploadListeners中 .

    您应该在项目中将目标java(JDK合规性)更改为1.6,因为它是GWT中支持的最后一个以避免问题,尽管它在1.7中运行 .

相关问题