Gwt 用户如何在客户端下载文件(GoogleWebToolkit)
我正在使用GWT(GoogleWebToolkit)创建一个网站。 我需要向用户显示一个表,并让用户下载表的内容 在客户端,当用户按下“下载”按钮时,如何下载文件 “下载”按钮有一个Gwt 用户如何在客户端下载文件(GoogleWebToolkit),gwt,download,Gwt,Download,我正在使用GWT(GoogleWebToolkit)创建一个网站。 我需要向用户显示一个表,并让用户下载表的内容 在客户端,当用户按下“下载”按钮时,如何下载文件 “下载”按钮有一个onClick()侦听器。客户端类扩展了复合类 我试图让类扩展HttpServlet,但它变得太复杂了 我已经在这里读过帖子: 但我仍然不知道如何在客户端向用户提供可下载的文件 如果您知道文件的路径,代码片段如下所示 button.addClickHandler(new ClickHandler() {
onClick()
侦听器。客户端类扩展了复合类
我试图让类扩展HttpServlet
,但它变得太复杂了
我已经在这里读过帖子:
但我仍然不知道如何在客户端向用户提供可下载的文件 如果您知道文件的路径,代码片段如下所示
button.addClickHandler(new ClickHandler()
{
@Overrid
public void onClick(ClickEvent event)
{
Window.open(GWT.getHostPageBaseURL() + "/file.rar", "name", "enabled");
}
});
您确实需要区分GWT客户端java代码和服务器端java代码。
在GWT Java代码的客户端上
String url = GWT.getModuleBaseURL() + "downloadService?fileInfo1=" + fileInfo1;
Window.open( url, "_blank", "status=0,toolbar=0,menubar=0,location=0");
在非gwt Java代码的服务器端-
在web.xml中
<servlet>
<servlet-name>downloadService</servlet-name>
<servlet-class>AAA.BBB.CCC.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>downloadService</servlet-name>
<url-pattern>/<gwtmodulename>/downloadService</url-pattern>
</servlet-mapping>
确保将文件内容推送到**outputStream**
您可以尝试使用GWT在客户端上读取和写入文件
要完成io部分第一项的答案
你可以参考这个链接
或参考此代码
File file = new File(enter the filepath here)
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
//Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
System.out.println("read " + readNum + " bytes,");
}
} catch (IOException ex) {
System.err.println("unable to convert to bytes");
}
byte[] bytes = bos.toByteArray();
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
希望有帮助谢谢你的评论,但是我已经考虑过了。问题是,我不能在客户端使用文件写入例程(它可以被编译,但会导致错误-模块加载错误)。您不能在客户端通过代码写入文件,类似的内容在浏览器上是不允许的。你需要让浏览器下载文件,用户指定下载位置。你说得对。我用类似的方法解决这个问题。不管怎样,谢谢你的回答。是的,你说得对。我曾尝试编写自己的代码,但在客户端编写文件是不可能的。我用类似的方法解决这个问题。无论如何,感谢您的回答。您不必创建一个新的servlet,只需重写javax.servlet.http.HttpServlet#doGet
methodGetFile()即可重用一个GWT服务servlet?这里没有定义,这对我来说不起作用。我看到一个新窗口打开(大约:空白),文件下载到文件系统,但不显示在浏览器中。对于客户端:window.Location.replace(“/downloadServlet”)代码>
File file = new File(enter the filepath here)
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
//Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
System.out.println("read " + readNum + " bytes,");
}
} catch (IOException ex) {
System.err.println("unable to convert to bytes");
}
byte[] bytes = bos.toByteArray();
outputStream.write(bytes);
outputStream.flush();
outputStream.close();