【问题标题】:Download manager in Java [closed]Java中的下载管理器[关闭]
【发布时间】:2010-12-11 21:43:57
【问题描述】:
我需要通过 FTP/HTTP 从 Java 获取几个大文件(几个 gig)。有没有现成的库(java/命令行工具)方便下载?一些明显的要求是:
- 多连接下载 - 应该能够打开到服务器的多个连接以加速下载(如 FlashGet/GetRight/...)
- 继续下载
编辑 - 我真的不希望编写这样的库,而是为现有的经过测试的生产级库窃取(或付费)。 rsynch 不相关,因为我需要从 HTTP 和 FTP 站点下载文件,它不用于内部文件传输。
【问题讨论】:
标签:
java
http
ftp
download
download-manager
【解决方案1】:
HTTP 协议确实支持在偏移量处开始部分下载,但对验证文件的本地部分版本以确保其末尾没有附加垃圾(或类似的东西)的支持有限。如果您的环境允许,我推荐 rsync 使用 --partial 选项。它旨在从命令行支持这种功能。
如果您不能使用 rsync,您可能想尝试使用 Commons-HTTPClient 并利用 Range HTTP 标头下载可管理大小的块。
【解决方案2】:
如果您知道如何在 java 中创建套接字和线程,那就没那么难了。
首先创建一个请求并读取标头以获取Content-length 标头。然后设计一个策略将您的请求拆分为例如每个请求 500K 的块。然后为每个请求使用一个线程开始说 10 个请求。在每个请求中,您必须定义 Range 标头。
恢复下载是存储您尚未下载的范围的问题。
如果你真的想很好地掌握所使用的协议,我建议你阅读这个 HTTP/1.1 Header Fields RFC here。
但是,如果您正在寻找一种简单的方法,rsync 或 scp 就足够了。