java 生成动态文件并将其下载到GWT中

jw5wzhpr  于 2023-01-24  发布在  Java
关注(0)|答案(5)|浏览(137)

我正在开发一个GWT应用程序。这个应用程序运行在服务器端。我实现了一个按钮,它调用了一个在服务器端生成本地文件的方法。然而,我想在客户端下载/生成这个文件。我该如何在GWT中做到这一点呢?
谢谢

velaa5lx

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();
        }
    }
}
gzjq41n4

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变量中指定内容的文件下载到客户端浏览器

ldioqlga

ldioqlga3#

目前的情况是,并不是所有的浏览器都能使用本地文件系统,所以在GWT中没有通用的解决方案。而且据我所知,FilesStem API还没有完成。
作为替代方案,您可以继续使用服务器端生成的文件,或者使用Flash插件来生成和存储文件(您必须创建一个Flash应用程序,并创建一些API来从GWT控制它)。

vhmi4jdf

vhmi4jdf4#

你一定要看一下Aki Miyazaki’s HTML5 file download code for GWT,它可以按照你的要求**在客户端工作。
AFAIK,到目前为止,它只在Chrome中工作,但随着其他浏览器实现download attribute,这一点应该会改变。

ws51t4hk

ws51t4hk5#

您可以使用Data URIs来完成此操作:
1.让GWT RPC方法返回文件内容或生成文件的数据。
1.在客户端,使用接收到的文件内容格式化Data URI或生成数据内容。
1.使用Window.open打开文件保存对话框,传递格式化的DataURI
请查看此参考文档,以了解Data URI的用法:
在jQuery中导出为csv

相关问题