2016-06-09 16 views
1

我们在Jetty 9中使用scalatra。我们有一个服务于静态文件的端点。但我注意到任何大于2GB的东西似乎都会被截断。我可以看到文件被分块发送。 Curl和wget可以正确开始下载,并且完成后不会出错。我在寻找scalatra和Jetty的问题,并没有看到类似我看到的问题。但它看起来像有人用一个int,当他们需要很长的发送带有Scalatra服务器的大文件在2^31 - 1字节后结束

+0

某些文件系统无法处理2GB +文件。你也是这样吗?详细描述客户有问题。你在客户端上运行Java 64位吗? –

+0

我们使用的是ext4,所以我相信我们可以处理2GB +文件。我们正在为服务器运行java 64位 – jamesatha

+0

服务器不是问题,正如你所说的,curl和wget处理得很好。关注客户。 –

回答

1

对于那些已经通过搜索结果碰到这个问题跌跌撞撞......

这在码头问题跟踪被处理在 https://github.com/eclipse/jetty.project/issues/630

答案是这是一个scalatra错误,它错误地假设.transferTo()有保证发送所有传递给它的字节。

scalatra实现需要将其使用.transferTo()放在循环中,以验证整个大小是否已发送。

要回答2GB?的原因,那是因为transferTo()使用java的ByteBuffer,它本身具有2GB的限制。

+0

是的,这最终成为scalatra的一个问题。我们有一个解决方案,这是出于审查。你可以追踪它在bug上的进展:https://github.com/scalatra/scalatra/issues/575 – jamesatha