繁体   English   中英

哪种更好的方式是通过Tomcat服务文件(用于下载)?

[英]Which is a better way of serving files (for downloads) via Tomcat?

如果我可以使用字节数组获取文件,哪种方法可以使用户下载该文件更好?

答:使用Apache IOUtils将字节数组直接写入响应流。 在这种情况下,如果客户端停止下载和/或断开连接会发生什么? 我想将JVM的内存利用率保持在最低水平。

B:将字节数组写入某个临时位置的文件中。 然后获取一个FileInputSteam并将其写入响应。 在这种情况下,我需要编写代码来管理磁盘上保存的文件并确保定期清理。 清理算法将需要确保它不会尝试删除当前正在提供给客户端的文件。

这是一个典型的案例,我认为没有一种适合所有人的方法:

  • 您的字节数组的大小是多少? (平均值,最小值/最大值)
  • 您是否仍从磁盘读取它们?
  • 一旦拥有字节数组,通常在内存中保留多长时间
  • 与成功下载和完整下载相比,您多久观察一次连接中断? 哪种文件大小?
  • 您是否测量了仅传输流式传输的字节时会发生什么?
  • 是否有许多用户同时下载相同的内容?

正如您所说的,无论如何,文件都以字节数组形式存在,我不希望它能够精确地服务于该字节数组。 但是,您需要了解字节数组的编码(假设它是文本内容,则需要发送带有响应的编码头)

如果不衡量您的情况,几乎没有合理的建议来建议您做什么。

编辑,回复您的评论 :只要处理了一个请求-例如,当文件已完全传输或引发“管道中断”异常时,我都会假定您的内存将被释放,除非您明确地将其保存在Web应用程序的会话或存活时间更长的任何其他数据结构。 但是您可能不会明确地这样做,对吗?

您下载的大小和性质似乎对I / O或内存的需求并不高。 我的建议:不用担心。 但是,您应该做的是:测量。 检查内存消耗是否确实是一个问题。 我怀疑是这样。 如果没有损坏:请勿修复。

无论如何,您都有字节数组-您不妨使用它将其流式传输到客户端,然后再忽略它。 看起来这不会花费太长时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM