泽西岛多部分流式传输,而接收服务器上没有磁盘缓冲

tob*_*i.b 6 tomcat web-services multipartform-data stream jersey

我正在尝试通过HTTP将(大)文件流式传输到数据库中。我正在使用Tomcat和Jersey作为Webframework。我注意到,如果我将文件发布到资源中,则该文件首先在磁盘上(在temp \ MIME * .tmp}中进行缓冲,然后再通过doPOST方法进行处理。

这确实是不希望的行为,因为它会使磁盘I / O翻倍,并且还会导致UX出现问题,因为如果浏览器已经完成上传操作,则用户需要等待几分钟(当然取决于文件大小),直到他得到HTTP响应。

我知道这可能不是大型文件上传的最佳实现(因为您甚至没有任何恢复功能),但要求也是如此。:/

所以我的问题是,是否有任何方法可以禁用MULTIPART POST的(磁盘)缓冲。内存缓冲显然太昂贵了,但是我真的看不出是否需要磁盘缓冲吗?(请解释)像YouTube这样的大型网站如何处理这种情况?或者如果发送了文件,是否至少有机会立即向用户提供反馈?(应该很糟糕,因为可能仍然有类似SQLException的东西)

Emr*_*lak 5

如果有人仍然感兴趣,我通过使用Apache Commons Streaming api解决了同样的问题

该页面上的代码示例对我来说效果很好。


Chr*_*ltz 3

最好的选择是完全控制并编写自己的 servlet,该 servlet 只获取 request.getInputStream(如果您正在使用文本,则获取 request.getWriter)并自行进行流式传输。大多数框架通过为您处理所有上传、临时存储等,让您的生活变得“轻松”,但通常会让做流媒体等事情变得困难。自己抓取流并做任何您想做的事情非常容易。