【问题标题】:Send excel file from server-side to client-side using GWT使用 GWT 将 excel 文件从服务器端发送到客户端
【发布时间】:2014-11-25 18:33:45
【问题描述】:

我实现了一个功能,让用户可以将哈希图中的内容保存到 Excel 文件中。这样做的代码是服务器端的。我希望用户能够将文件保存在他/她自己计算机上的可选文件位置。

我已经阅读了很多关于堆栈溢出的帖子,其中讨论了如何执行此操作的细节。但我看不到全貌。

关于我应该如何解决这个问题有什么想法吗?

我正在使用 GWT 和 apache poi 生成 excel 文件。

【问题讨论】:

  • 您需要实现一个 servlet。像这样的东西:stackoverflow.com/questions/1442893/…
  • @CHristian - 这也是我读过的。但由于我是 gwt 和 somehwat Java 的新手,我似乎无法了解全貌。我发现的所有讨论都只涉及使用 servlet 的一些特定问题。任何关于如何实现 servlet 的指南?
  • 我需要保留我的excel文件生成服务器端是否正确?

标签: java apache gwt apache-poi


【解决方案1】:

-在服务器端创建servlet,使用ServletOutputStream

-从GWT客户端访问servlet url,当你从客户端调用servlet url时,它会打开一个对话框来保存文件。

查看 Manik Chand 的评论 https://groups.google.com/forum/#!topic/google-web-toolkit/tX5reaOhtew

【讨论】:

  • 所以excel文件没有保存在服务器上?
  • 不,那是 ServletOutputStream 的用途 - 提供一个输出流,用于向客户端发送二进制数据。
【解决方案2】:

你可以这样做:

public class FileServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

    if (request.getRequestURI().contains("/excel")) {

      String id = request.getParameter("id");         
      // Prepare your file for id = 123

      response.setHeader("Content-Disposition", "attachment;filename=myFile.xls");
      response.setContentType("application/vnd.ms-excel");

      OutputStream outputStream = response.getOutputStream();
      // document is byte[] - this is your file.
      outputStream.write(document);
      outputStream.close();
    }
  }
}

然后您需要将此 servlet 映射到您的 web.xml 文件中(例如,映射到“/file”处理程序)。最后,您向您的用户展示一个可能如下所示的链接:

https://mysite.com/file/excel/?id=123

当用户点击此链接时,浏览器会询问该用户将文件保存在哪里。

【讨论】:

  • 目前我有一个从客户端接收哈希图的服务器端类。我需要将此类更改为 servlet?在我调用类时调用 servlet?将excel文件保存在服务器上,然后请求服务器保存文件位置的excel文件?
  • 这取决于创建 Excel 文件需要多长时间。一种选择是以您现在的方式发送哈希图。文件准备好后,将其保存到 memcache、Blobstore 或 Cloud Storage,并响应客户端。当客户端收到响应时,它会向用户显示下载链接。如果文件可以很快生成,你可以用这个 servlet 替换你现有的类。
  • 所以需要在服务器上创建物理文件?
  • 这取决于您的用例。如果用户稍后可能会回来下载文件,您需要将其存储在某个地方。如果您立即响应,则需要在响应中发送字节数组 - 无需将其存储为文件。
  • 这是我迷路的地方。所以我把excel文件序列化,然后通过网络发回客户端?
猜你喜欢
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 2018-09-24
  • 2015-02-06
  • 2013-05-23
  • 1970-01-01
相关资源
最近更新 更多