【问题标题】:GWT - uploading file to server without using FileUpload dialogGWT - 不使用 FileUpload 对话框将文件上传到服务器
【发布时间】:2012-10-22 14:25:33
【问题描述】:

我需要从用 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(); }-*/;

虽然这确实会在单击按钮时打开文件选择对话框,但同时也会显示文件名为空值的消息框。

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

【问题讨论】:

    标签: gwt


    【解决方案1】:

    这是一个工作示例:

    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();
    }-*/;
    

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

    【讨论】:

    • 不,它不起作用。选择文件后,我无法看到 MessageBox。我需要的是,只有在选择文件后,才会触发实际的上传(MessageBox 只是一个用于测试的占位符,它将被实际的 servlet 上传代码替换)。
    • 我用一个工作示例替换了答案。这段代码使用 GWT 2.4.0 对我来说运行得很好
    • 非常感谢您的帮助,但它对我不起作用。我看不到 Window.alert。我正在使用 GWT 2.3.0,并且我在 FF 浏览器(最新版本)中进行了相同的测试,但我认为这并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多