使用scalatra服务器发送大文件在2 ^ 31 - 1个字节后结束

时间:2016-06-09 16:42:16

标签: scala jetty jetty-9 scalatra

我们正在使用带有Jetty 9的scalatra。我们有一个提供静态文件的端点。但我注意到任何大于2GB的东西似乎都被截断了。我可以看到该文件被分块发送。 Curl和wget可以正常启动下载并完成而不会出现错误。我已经找到了scalatra和Jetty的问题,并没有看到任何像我看到的问题。但看起来有人在需要长时间时使用了一个int

2 个答案:

答案 0 :(得分:2)

对于那些通过搜索结果偶然发现此问题的人......

这是在Jetty问题跟踪器上处理的 https://github.com/eclipse/jetty.project/issues/630

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

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

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

答案 1 :(得分:1)