4

我需要从应用程序服务器(JBoss)中检索一个大文件(千兆字节)并避免将其加载到内存中,我想通过 EJB 流式传输它。

是否可以将数据作为流从应用程序服务器中取出?

4

2 回答 2

4

创建一个HttpServlet,流式传输文件。

更新 小心你的标题。您不能通过 设置 ContentLength-Header setContentLength(),因为它只接受int

您必须设置它:setHeader("Content-Length", (long)length)

也许这会有所帮助:Using ServletOutputStream to write very large files in a Java servlet without memory issues

有一个限制,但这取决于客户端。如果客户端将文件保存在内存中,它将无法工作。

于 2012-05-24T14:26:04.283 回答
4

EJB是指远程bean吗?这些 bean 通常基于 RMI,而后者又使用 Java 序列化。您不能使用 RMI 流式传输数据。

然而,对于 servlet 和 HTTP,这将非常简单。只需打开FileInputStream您的大文件并将其逐字节复制到servlet 输出

要记住:

  • 使用输入文件缓冲
  • 在最开始设置Content-Length标头,以便客户端知道还剩下多少数据
于 2012-05-24T14:27:36.480 回答