在 GWT 的客户端读取文件
Posted
技术标签:
【中文标题】在 GWT 的客户端读取文件【英文标题】:reading a file on client side in GWT 【发布时间】:2012-02-14 15:05:24 【问题描述】:我想读取文件的内容并将其存储在数组中。 我有一个使用 formPanel 和 formupload 浏览文件的代码。
如何读取文件并存储在数组中。
任何示例代码都会有很大帮助。
【问题讨论】:
【参考方案1】:您可以使用 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]);
-*/;
【讨论】:
这是完美的解决方案! 很好的解决方案。谢谢【参考方案2】:GWT 客户端代码只是 JavaScript,并且受到任何常规 JavaScript 在浏览器沙盒模型中的相同限制。
也就是说,任何浏览器都无法访问 JavaScript。
文件对话框和由此产生的到服务器的传输由浏览器处理,JavaScript 代码无法以任何方式使用。
您必须将文件上传到服务器,然后在服务器上处理文件并通过将数据从服务器发送回客户端来显示您需要显示的内容。
【讨论】:
您可以使用 HTML5 FileReader。下面是它的一个例子:codepen.io/matt-west/pen/KjEHg【参考方案3】:尝试使用 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/
【讨论】:
【参考方案4】:1) 将文件上传到您的服务器(例如使用 gwt-upload)
2) 然后从客户端向服务器发出请求以检索文件的字节
【讨论】:
:我不能先将文件的内容存储在数组中,然后再传输数组。【参考方案5】:您可以使用 Flash 或 Java Applet 在客户端完成所有操作。但这些都是复杂的,可能不是很漂亮的解决方案。
看看 GwtAI for Java Applet 在 GWT 中的集成: http://code.google.com/p/gwtai/
【讨论】:
以上是关于在 GWT 的客户端读取文件的主要内容,如果未能解决你的问题,请参考以下文章
GWT - 如何读取服务器上的(文本)文件(或:如何在 RemoteServiceServlet 中获取 servletContext)