我需要从应用程序服务器(JBoss)中检索一个大文件(千兆字节)并避免将其加载到内存中,我想通过 EJB 流式传输它。
是否可以将数据作为流从应用程序服务器中取出?
我需要从应用程序服务器(JBoss)中检索一个大文件(千兆字节)并避免将其加载到内存中,我想通过 EJB 流式传输它。
是否可以将数据作为流从应用程序服务器中取出?
创建一个HttpServlet,流式传输文件。
更新
小心你的标题。您不能通过 设置 ContentLength-Header setContentLength()
,因为它只接受int
。
您必须设置它:setHeader("Content-Length", (long)length)
也许这会有所帮助:Using ServletOutputStream to write very large files in a Java servlet without memory issues
有一个限制,但这取决于客户端。如果客户端将文件保存在内存中,它将无法工作。
EJB是指远程bean吗?这些 bean 通常基于 RMI,而后者又使用 Java 序列化。您不能使用 RMI 流式传输数据。
然而,对于 servlet 和 HTTP,这将非常简单。只需打开FileInputStream
您的大文件并将其逐字节复制到servlet 输出。
Content-Length
标头,以便客户端知道还剩下多少数据