使用GWT使用对话框上传文件以浏览到文件

时间:2011-06-07 04:47:12

标签: gwt file-upload dialog

我正在开发一个GWT Web应用程序,用户正在推动更新(如twitter)。更新是文本+附件。我希望用户输入更新,可选择点击上传按钮,弹出窗口以浏览文件,然后在完成后点击“发送更新”按钮。文本+附件将存储在mysql中的一行中。文本为ususal varchar,文件为blob。文件大小很小。

我目前对如何实现这一点毫无头绪。查看API和谷歌搜索我发现正在使用“FileUpload”小部件。文档说它曾用于与FormPanel一起使用。我不确定我是否真的得到了所有的东西,我如何应用它。

如何解决我的问题?

1 个答案:

答案 0 :(得分:5)

浏览器上传文件的典型方法是使用输入type='file'表单字段。没有表单就无法使用AJAX上传文件。至少我找不到任何东西。我认为,这是一项安全措施。

因此,要使文件上传可用,您必须提供带有file输入的表单。表格必须通过常规请求提交,而不是AJAX。

因此,您必须定义FormPanel并向其添加FileUpload。例如:

final FormPanel form = new FormPanel();
form.setAction("my.action");
// Because we're going to add a FileUpload widget, we'll need to set the
// form to use the POST method, and multipart MIME encoding.
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
// Create a FileUpload widget.
fileUpload = new FileUpload();
fileUpload.setName("fileUpload");
form.add(fileUpload);
// Add other components to form

其他组件包括用户文本输入。可能有不同处理方式的选项,但我认为最好通过相同的表单提交来处理它们。

现在,您必须添加一些内容来触发表单提交。

submitButton = new Button("Upload", new ClickHandler() {
    public void onClick(ClickEvent event) {               
        form.submit();
    }
});
formPanel.add(submitButton);

最后,您必须处理上传。您可以通过多种方式执行此操作,但必须是常规请求处理,而不是通过AJAX或GWT。我个人喜欢使用Spring MVC。但是你可以使用你选择的框架。我不打算在此详述。如果愿意,您可以编写Perl脚本。

这种方法有其他选择。您可以使用Flash,您可以使用Adobe AIR,也可能有其他方法。在不同的库中有这些方法的小部件。请访问此网站:http://google.wikia.com/wiki/Google_Web_Toolkit

免责声明:这是我使用的方法。我可能错过了一些东西,也许还有其他方法我想了解。