如何从GWT FileUpload组件检索文件?

如何从GWT FileUpload组件检索文件?,gwt,file-upload,Gwt,File Upload,我想用GWT fileUploader组件上传一个文件 我试着这样做 FileUpload fileUpload = new FileUpload(); filepload.addChangeHandler(new new ChangeHandler() { @Override public void onChange(ChangeEvent event) { // here i submit the form, and a response is create

我想用GWT fileUploader组件上传一个文件

我试着这样做

FileUpload fileUpload = new FileUpload();
filepload.addChangeHandler(new new ChangeHandler() {
    @Override
    public void onChange(ChangeEvent event) {
         // here i submit the form, and a response is created to client side to display success message.
    } });
  • 好的,到目前为止,我可以上传一个文件,从servlet中我可以给出一个成功消息
  • 我在表单面板的OnSubmitComplete事件中处理了它
  • 谢谢你
  • 让我再问一件事,在保存到数据库之前,我是否可以显示上传的文件
  • i、 实际上,我需要提供一个用于上传文件和文本区域的复合组件,以告知有关文件的详细信息
  • 当用户选择上传文件时,我想显示上传的文件(这样他可以确保上传正确的文件)
  • 当整个表单提交时,它将保存到db

您可以使用流动代码在客户端(在gwt代码中)获取文件名及其扩展名:

FileUpload fileUpload = new FileUpload();

Button uploadButton = new Button("Click");
uploadButton.addClickHandler(new ClickHandler() {
  public void onClick(ClickEvent event) {
    String filename = fileUpload.getFilename();
      Window.alert(filename);
  }
});
我猜您希望允许用户使用GWT Fileupload小部件上载文件,然后不希望在服务器端处理它。您希望在客户端使用字节数组表示


文件处理的常用步骤 浏览器->文件上传对话框->选择文件->向服务器提交带有文件的表单->在服务器上处理文件->将处理后的文件作为响应(字符串)发送回客户端

如果您想避免上述步骤并在浏览器中处理文件,那么在当前javascript中是无法做到的。类似Flash、Applet、Silverlight或Activex的并行技术可能会有所帮助。未来将采用的正确方法是使用HTML5文件API

如果您不希望使用诸如flash/applet之类的遗留技术,那么可以探索FileReader上的HTML5API。不过,折衷的办法是,您需要检查是否支持跨浏览器的api

HTML5文件阅读器 FileReader包括四个异步读取文件的选项:

FileReader.readAsBinaryString(Blob|File) - The result property will contain the file/blob's data as a binary string.
FileReader.readAsText(Blob|File, opt_encoding) - The result property will contain the file/blob's data as a text string. 
FileReader.readAsDataURL(Blob|File) - The result property will contain the file/blob's data encoded as a data URL.
FileReader.readAsArrayBuffer(Blob|File) - The result property will contain the file/blob's data as an ArrayBuffer object.
这些上面GWT包装器示例-

参考-

  • 您无法从GWT FileUpload小部件获取用户设备上文件的绝对路径

  • 上传文件并将其存储为字节数组,不需要文件的绝对路径

  • GWT文档提供了如何使用上载文件小部件的示例:


    您尝试了什么?请添加一些代码。您存储文件,以便知道保存文件的路径。你需要上传程序做什么?@AndreiVolgin实际上,我想上传任何类型的文件,然后将其作为字节数组存储在db中。所以我想要那个文件的内容。为此,我需要文件的绝对路径。。有什么办法得到它吗?我想使用GWT组件来实现它;filepload.addChangeHandler(new-new-ChangeHandler(){@Override public void onChange(ChangeEvent事件){//这里我想要上传的文件作为字节数组。}});您可以在服务器端而不是客户端获取绝对路径。FileUpload允许用户上载文件。您必须将此小部件放在表单(FormPanel)中(并从表单提交)。提交时,必须调用servlet。在那里你必须写一个文件上传代码。文件名不返回文件的实际路径,它将返回一个假的路径,以确保安全。那么请告诉我如何上传它。我在我的答案中添加了链接。感谢该链接,请检查更新的问题,看看你是否能在这方面帮助我。文件处理的一般步骤浏览器->文件上传对话框->选择文件->将带有文件的表单提交到服务器->在服务器上处理文件->将处理后的文件作为响应(字符串)发送回客户端。在这些通常的步骤中,如果我需要为用户提供一个关于上传文件的评论,即在SelectFile和Submit Form之间,该怎么办。我需要这样一个流程:浏览器->文件上传对话框->选择文件->在浏览器中显示上传文件->向服务器提交带有文件的表单->在服务器上处理文件->将处理后的文件作为响应(字符串)发送回客户端。当前javascript中没有这样的选项。如果您不打算使用其他遗留技术,如flash/applet,那么可以研究FileReader上的HTML5API-FileReader.readAsBinaryString(Blob | File)。不过,折衷的办法是,您需要检查是否支持跨浏览器的api。更新了有关HTML5文件读取器api和GWT包装器的详细信息。