4

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

谢谢

4

5 回答 5

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();
        }
    }
}
于 2012-04-20T08:12:37.110 回答
1

目前的情况是,并不是所有的浏览器都能够使用本地文件系统,所以在 GWT 中没有通用的解决方案。据我所知,FileSstem API 还没有完成。

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

于 2012-04-23T16:05:45.443 回答
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 字符串之外,还提供要下载的文件名作为文本(String),该方法会将文本变量中指定内容的文件下载到客户端浏览器

于 2015-08-31T09:08:39.540 回答
0

您绝对应该看看Aki Miyazaki 的 GWT 的 HTML5 文件下载代码。它按照您的要求在客户端工作。

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

于 2012-07-23T16:04:09.407 回答
0

您可以使用Data URIs做到这一点:

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

看看这个参考,了解Data URI的使用:

在 jQuery 中导出为 csv

于 2013-01-04T14:06:06.207 回答