在GWT中读取客户端的文件

时间:2012-02-14 15:05:25

标签: java gwt client-side gwt-rpc gwt2

我想读取文件的内容并将其存储在数组中。 我有一个使用formPanel和formupload浏览文件的代码。

如何读取文件并存储在数组中。

任何示例代码都会提供很好的帮助。

5 个答案:

答案 0 :(得分:3)

您可以使用HTML5文件阅读器。像这样:

@UiField FileUpload fileUploadWidget;

JavaScriptObject files = fileUploadWidget.getElement().getPropertyJSO("files");

readTextFile(files);

public static void fileLoaded(String fileContents) {
    GWT.log("File contents: " + fileContents);
}

public static native void readTextFile(JavaScriptObject files)
/*-{
    var reader = new FileReader();

    reader.onload = function(e) {
        @com.example.YourClass::fileLoaded(*)(reader.result);
    }

    return reader.readAsText(files[0]);
}-*/;

答案 1 :(得分:2)

GWT客户端代码只是JavaScript,并受到浏览器沙箱模型中任何常规JavaScript所受限制的限制。

也就是说,任何浏览器都无法从JavaScript获得本地文件访问权限。

文件对话框以及由此产生的向服务器的传输由浏览器处理,并且不能以任何方式用于JavaScript代码。

您必须将文件上传到服务器,然后在服务器上处理该文件,并通过从服务器将数据发送回客户端来显示您需要显示的内容。

答案 2 :(得分:2)

尝试使用GWT中的元素库:

http://www.gwtproject.org/articles/elemental.html

将文件内容读取到txtArea(所有客户端站点)的示例代码:

import elemental.client.*;
import elemental.dom.*;
import elemental.html.*;
FileEntry fileEntry = (FileEntry)entry;
FileCallback callback = new FileCallback() {
  public boolean onFileCallback(File file) {
    final FileReader reader = window.newFileReader();
    reader.setOnloadend(new EventListener() {
      public void handleEvent(Event evt) {
        txtArea.setText(reader.getResult().toString());
      }
    });
    reader.readAsText(file);
    return true;
  }
};
fileEntry.file(callback, errorCallback);

本教程可能也很有用: http://www.instantshift.com/2013/11/19/html5-features-with-gwt-elemental/

答案 3 :(得分:0)

1)将文件上传到您的服务器(例如使用gwt-upload)

2)然后从客户端向服务器发出请求以检索文件的字节

答案 4 :(得分:0)

您可以使用Flash或Java Applet在客户端执行此操作。但那些很复杂,可能不是很漂亮的解决方案。

在GWT中查看GwtAI for Java Applet集成: http://code.google.com/p/gwtai/