生成动态文件并在GWT中下载

时间:2012-04-20 07:56:46

标签: java gwt servlets rpc

我正在开发一个GWT应用程序。此应用程序在服务器中运行。好吧,我实现了一个按钮,它调用一个在服务器端生成本地文件的方法。但是我想在客户端下载/生成此文件。我怎么能在GWT中做到这一点?

由于

5 个答案:

答案 0 :(得分:3)

在我们的项目中,我们根据需要在服务器上创建了一个文件。文件成功创建后,我们会向浏览器发送通知并创建链接。

请参阅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();
        }
    }
}

答案 1 :(得分:1)

目前的情况是,并非所有浏览器都能够使用本地文件系统,因此GWT中没有通用的解决方案。另据我所知,FilesSstem API尚未完成。

作为替代方案,您可以继续使用服务器端生成的文件,或使用Flash插件生成和存储文件(您必须创建一个Flash应用程序,并创建一些API来从GWT控制它)。

答案 2 :(得分:1)

    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),此方法会将文本变量中包含指定内容的文件下载到客户端浏览器

答案 3 :(得分:0)

你一定要看看Aki Miyazaki’s HTML5 file download code for GWT。 它可以根据您的要求在客户端

AFAIK,截至目前,它仅适用于Chrome,但随着其他浏览器实施download attribute,这应该会改变。

答案 4 :(得分:0)

您可以使用Data URIs执行此操作:

  1. 使您的GWT RPC方法返回文件内容或数据以生成文件。
  2. 在客户端,使用收到的文件内容格式化Data URI或生成数据内容。
  3. 使用Window.open打开文件保存对话框,传递格式化的DataURI
  4. 请参阅此参考,以了解Data URI用法:

      

    Export to csv in jQuery