我正在开发一个GWT应用程序。这个应用程序运行在服务器端。我实现了一个按钮,它调用了一个在服务器端生成本地文件的方法。然而,我想在客户端下载/生成这个文件。我该如何在GWT中做到这一点呢?谢谢
velaa5lx1#
在我们的项目中,我们在服务器上创建了一个按需文件。当文件成功创建时,我们向浏览器发送通知并创建了一个链接。请参阅servlet代码:
public class DownloadServlet extends HttpServlet { private FileManager fileManager; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String encodedFileName = req.getRequestURI().substring( req.getContextPath().length() + req.getServletPath().length() + 1); String decodedFileName = URLDecoder.decode(encodedFileName, "utf-8"); File downloadableFile = fileManager.toFile(decodedFileName); ServletOutputStream os = resp.getOutputStream(); try { InputStream is = FileUtils.openInputStream(downloadableFile); try { IOUtils.copy(is, os); } finally { is.close(); } } finally { os.close(); } } }
gzjq41n42#
private native void Download(String filename, String text)/*-{ var pom = document.createElement('a'); pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); pom.setAttribute('download', filename); document.body.appendChild(pom); pom.click(); document.body.removeChild(pom); }-*/;
在GWT代码中使用JSNI方法,除了JSON字符串外,还提供您想要下载的文件名为text(String),此方法会将text变量中指定内容的文件下载到客户端浏览器。
ldioqlga3#
目前的情况是,并不是所有的浏览器都能使用本地文件系统,所以在GWT中没有通用的解决方案。而且据我所知,FilesStem API还没有完成。作为替代方案,您可以继续使用服务器端生成的文件,或者使用Flash插件来生成和存储文件(您必须创建一个Flash应用程序,并创建一些API来从GWT控制它)。
vhmi4jdf4#
你一定要看一下Aki Miyazaki’s HTML5 file download code for GWT,它可以按照你的要求**在客户端工作。AFAIK,到目前为止,它只在Chrome中工作,但随着其他浏览器实现download attribute,这一点应该会改变。
ws51t4hk5#
您可以使用Data URIs来完成此操作:1.让GWT RPC方法返回文件内容或生成文件的数据。1.在客户端,使用接收到的文件内容格式化Data URI或生成数据内容。1.使用Window.open打开文件保存对话框,传递格式化的DataURI。请查看此参考文档,以了解Data URI的用法:在jQuery中导出为csv
Window.open
5条答案
按热度按时间velaa5lx1#
在我们的项目中,我们在服务器上创建了一个按需文件。当文件成功创建时,我们向浏览器发送通知并创建了一个链接。
请参阅servlet代码:
gzjq41n42#
在GWT代码中使用JSNI方法,除了JSON字符串外,还提供您想要下载的文件名为text(String),此方法会将text变量中指定内容的文件下载到客户端浏览器。
ldioqlga3#
目前的情况是,并不是所有的浏览器都能使用本地文件系统,所以在GWT中没有通用的解决方案。而且据我所知,FilesStem API还没有完成。
作为替代方案,您可以继续使用服务器端生成的文件,或者使用Flash插件来生成和存储文件(您必须创建一个Flash应用程序,并创建一些API来从GWT控制它)。
vhmi4jdf4#
你一定要看一下Aki Miyazaki’s HTML5 file download code for GWT,它可以按照你的要求**在客户端工作。
AFAIK,到目前为止,它只在Chrome中工作,但随着其他浏览器实现download attribute,这一点应该会改变。
ws51t4hk5#
您可以使用Data URIs来完成此操作:
1.让GWT RPC方法返回文件内容或生成文件的数据。
1.在客户端,使用接收到的文件内容格式化Data URI或生成数据内容。
1.使用
Window.open
打开文件保存对话框,传递格式化的DataURI。请查看此参考文档,以了解Data URI的用法:
在jQuery中导出为csv