【问题标题】:How to retrieve file from GWT FileUpload component?如何从 GWT FileUpload 组件中检索文件?
【发布时间】:2012-12-27 11:27:34
【问题描述】:

我想使用 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 发出成功消息。
  • 我是在表单面板的 onSubmitCompleate 事件中处理的,
  • 感谢分配。
  • 让我再问一件事,在将文件保存到数据库之前,我是否可以显示上传的文件?
  • 即,实际上我需要提供一个复合组件来上传文件和文本区域以告知有关文件的详细信息。
  • 当用户选择要上传的文件时,我想显示上传的文件(这样他就可以确保上传正确的文件)
  • 整个表单提交后会保存到数据库中。

【问题讨论】:

  • 你尝试了什么?请添加一些代码。
  • 您存储文件,因此您知道保存它的路径。您需要上传者提供什么?
  • @AndreiVolgin 实际上,我想上传任何类型的文件,然后将其作为字节数组存储在 db 中。所以我想要那个文件的内容。为此,我需要文件的绝对路径..有没有办法得到它?我想用 GWT 组件来做。
  • 我试过这样,FileUpload fileUpload = new FileUpload(); filepload.addChangeHandler(new new ChangeHandler() { @Override public void onChange(ChangeEvent event) { // 这里我希望上传的文件为字节数组。} });
  • 您可以在服务器端而不是客户端获取绝对路径。 FileUpload 允许用户上传文件。您必须将此小部件放在表单(FormPanel)内部(并从其提交)。在提交时,您必须调用 servlet。在那里你必须写一个文件上传代码。

标签: gwt file-upload


【解决方案1】:

我猜你想允许用户使用 GWT Fileupload 小部件上传文件,然后不希望在服务器端处理它。你想要一个字节数组表示在客户端。

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

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

如果您不希望使用 flash/applet 等传统技术,则可以探索 FileReader 上的 HTML5 api。但是权衡是您需要检查是否跨浏览器支持 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 包装器示例 - https://github.com/bradrydzewski/gwt-filesystem

参考 -

【讨论】:

  • 文件处理浏览器的常用步骤 -> 文件上传对话框 -> 选择文件 -> 将带有文件的表单提交到服务器 -> 在服务器上处理文件 -> 将处理后的文件作为响应发送回客户端(字符串) .在这些通常的步骤中,如果我需要对用户上传的文件进行审查,那是在 SelectFile 和 Submit Form 之间。我需要这样的流程:浏览器->文件上传对话框->选择文件->在浏览器中显示uplodedfile->将带有文件的表单提交到服务器->在服务器上处理文件->将处理后的文件作为响应发送回客户端(字符串) .
  • 当前 javascript 中没有这样的选项。如果您不打算使用 Flash/applet 等其他遗留技术,则可以探索 FileReader 上的 HTML5 api - FileReader.readAsBinaryString(Blob|File) 。但是权衡是您需要检查是否跨浏览器支持 api。
  • 更新了有关 HTML5 文件阅读器 api 和 GWT 包装器的详细信息。
【解决方案2】:

您可以使用流动代码在客户端(在您的 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);
  }
});

【讨论】:

  • 文件名不返回文件的实际路径,它会返回一个假路径,以确保安全。
【解决方案3】:
  1. 您无法从 GWT FileUpload 小部件获取用户设备上文件的绝对路径。

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

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

http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/ui/FileUpload.html

【讨论】:

  • 那么请告诉我如何上传。
  • 我将链接添加到我的答案中。
  • 感谢该链接,请您查看更新后的问题,看看您是否可以帮助我。
猜你喜欢
  • 2012-01-29
  • 2014-02-14
  • 2016-06-23
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多