GWT - 不使用FileUpload对话框将文件上传到服务器

Adi*_* G. 7 gwt

我需要从GWT编写的Web应用程序上传文件到服务器.复杂的部分是无法显示FileUpload对话框(由于TabPanel上的空间紧缩问题).所以点击一个按钮,我需要:

  • 直接打开文件选择,而无需使用包含要上载的UploadItem的其他表单来打扰用户
  • 文件选择后立即开始上传

我在GWT中编写了以下代码,点击按钮打开文件选择对话框:

final FileUpload upload = new FileUpload(); 

upload.setVisible(false);
upload.setName("uploadFormElement"); 
panel.add(upload);

panel.add( new Button("Select File", new ClickListener()
{ public void onClick(Widget pSender) 
{ 
     jsClickUpload( upload.getElement() );
     MessageBox.showMessage("selected filename: " + upload.getFilename());
} 
}));

native void jsClickUpload( Element pElement ) /*-{ pElement.click(); }-*/;
Run Code Online (Sandbox Code Playgroud)

虽然这会在单击按钮时打开文件选择对话框,但它同时还会显示带有文件名空白值的消息框.

所以我需要的是,只有在选择文件后,才会显示消息框.我怎样才能做到这一点?此外,如何在此之后将实际文件上传到服务器(M

tom*_*ler 8

这是一个工作示例:

public void onModuleLoad() {
    final FileUpload upload = new FileUpload();

    upload.setVisible(false);
    upload.setName("uploadFormElement");
    RootPanel.get().add(upload);

    Button b = new Button("Select File");
    b.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            jsClickUpload(upload.getElement());
        }
    });

    upload.addChangeHandler(new ChangeHandler() {

        @Override
        public void onChange(ChangeEvent event) {
            Window.alert(upload.getFilename());
        }});

    RootPanel.get().add(b);
}

native void jsClickUpload(Element pElement) /*-{
    pElement.click();
}-*/;
Run Code Online (Sandbox Code Playgroud)

要上传它,您需要一个接收上传的Servlet.我使用这个额外的库:http://code.google.com/p/gwtupload/您可以在他们的网站上找到所需的所有代码.