【发布时间】:2012-02-14 15:05:24
【问题描述】:
我想读取文件的内容并将其存储在数组中。 我有一个使用 formPanel 和 formupload 浏览文件的代码。
如何读取文件并存储在数组中。
任何示例代码都会有很大帮助。
【问题讨论】:
标签: java gwt client-side gwt-rpc gwt2
我想读取文件的内容并将其存储在数组中。 我有一个使用 formPanel 和 formupload 浏览文件的代码。
如何读取文件并存储在数组中。
任何示例代码都会有很大帮助。
【问题讨论】:
标签: java gwt client-side gwt-rpc gwt2
您可以使用 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]);
}-*/;
【讨论】:
GWT 客户端代码只是 JavaScript,并且受到任何常规 JavaScript 在浏览器沙盒模型中的相同限制。
也就是说,任何浏览器都无法访问 JavaScript。
文件对话框和由此产生的到服务器的传输由浏览器处理,JavaScript 代码无法以任何方式使用。
您必须将文件上传到服务器,然后在服务器上处理文件并通过将数据从服务器发送回客户端来显示您需要显示的内容。
【讨论】:
尝试使用 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/
【讨论】:
1) 将文件上传到您的服务器(例如使用 gwt-upload)
2) 然后从客户端向服务器发出请求以检索文件的字节
【讨论】:
您可以使用 Flash 或 Java Applet 在客户端完成所有操作。但这些都是复杂的,可能不是很漂亮的解决方案。
看看 GwtAI for Java Applet 在 GWT 中的集成: http://code.google.com/p/gwtai/
【讨论】: