使用GWT上传文件,并通过对话框浏览文件

使用GWT上传文件,并通过对话框浏览文件,gwt,file-upload,dialog,Gwt,File Upload,Dialog,我正在开发一个GWT web应用程序,其中用户正在推送更新(类似于twitter)。更新为文本+附件。我希望用户输入一个更新,可以选择点击upload按钮,它会弹出一个窗口来浏览文件,然后在完成后点击“send update”按钮。文本+附件将存储在mysql中的一行中。文本为usususal varchar,文件为blob。文件大小将很小 目前我对如何实现这一目标一无所知。查看API和谷歌搜索,我发现正在使用“FileUpload”小部件。医生说它是用来和FormPanel一起使用的。我不确定

我正在开发一个GWT web应用程序,其中用户正在推送更新(类似于twitter)。更新为文本+附件。我希望用户输入一个更新,可以选择点击upload按钮,它会弹出一个窗口来浏览文件,然后在完成后点击“send update”按钮。文本+附件将存储在mysql中的一行中。文本为usususal varchar,文件为blob。文件大小将很小

目前我对如何实现这一目标一无所知。查看API和谷歌搜索,我发现正在使用“FileUpload”小部件。医生说它是用来和FormPanel一起使用的。我不确定我是否真的了解了全部情况,以及如何将其应用到我的案例中


我怎样才能解决我的问题

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

因此,要使文件上传可用,您必须提供一个带有
文件
输入的表单。表单必须通过常规请求提交,而不是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。我个人喜欢使用SpringMVC来实现这一点。但您可以使用自己选择的框架。我不打算在这里谈论细节。如果愿意,可以编写Perl脚本

这种方法还有其他选择。你可以使用Flash,你可以使用AdobeAIR,可能还有其他方法。在不同的库中有这些方法的小部件。请检查此网站:

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