我正在开发一个GWT Web应用程序,用户正在推动更新(如twitter)。更新是文本+附件。我希望用户输入更新,可选择点击上传按钮,弹出窗口以浏览文件,然后在完成后点击“发送更新”按钮。文本+附件将存储在mysql中的一行中。文本为ususal varchar,文件为blob。文件大小很小。
我目前对如何实现这一点毫无头绪。查看API和谷歌搜索我发现正在使用“FileUpload”小部件。文档说它曾用于与FormPanel一起使用。我不确定我是否真的得到了所有的东西,我如何应用它。
如何解决我的问题?
答案 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。
免责声明:这是我使用的方法。我可能错过了一些东西,也许还有其他方法我想了解。