【发布时间】:2012-05-24 14:23:35
【问题描述】:
我需要从应用服务器 (JBoss) 检索一个大文件(千兆字节)并避免将其加载到内存中,我想通过 EJB 流式传输它。
是否可以将数据作为流从应用服务器中取出?
【问题讨论】:
标签: java jakarta-ee jboss streaming ejb
我需要从应用服务器 (JBoss) 检索一个大文件(千兆字节)并避免将其加载到内存中,我想通过 EJB 流式传输它。
是否可以将数据作为流从应用服务器中取出?
【问题讨论】:
标签: java jakarta-ee jboss streaming ejb
创建一个HttpServlet,流式传输文件。
更新
小心你的标题。您不能通过setContentLength() 设置ContentLength-Header,因为它只接受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 output。
Content-Length标头,让客户端知道还剩多少数据【讨论】: