【问题标题】:Initiate download from certain byte从某个字节开始下载
【发布时间】:2013-07-26 12:27:01
【问题描述】:

我想在 android 上实现一个分布式下载管理器,以特定字节长度启动下载。所以这种方式可以下载部分文件,而不是只从 http 请求的开始到结束。

没有什么创新之处,我只是不知道怎么做。 (也不是bitorrent)

在java http apache库中,如何从服务器获取文件的长度,然后从文件中间开始下载到最后?

【问题讨论】:

  • 这可能跑题了,但你为什么要自己实现一个下载管理器呢?已有多种解决方案。
  • @jsalonen 它是一个新协议的概念证明,祝你好运,你会看到

标签: java android apache httprequest


【解决方案1】:

使用 HttpClient:

if (offset > 0) {
    String startFrom = "bytes= " + offset + "-";
    if (expected >= 0) {
        startFrom += expected;
    }
    mHttpGet.addHeader("Range", startFrom);
    expectedStatusCode = HttpStatus.SC_PARTIAL_CONTENT;
}

其中mHttpGetHttpGet 的一个实例,offset 是您已经下载的字节数,expected 是文件的大小。

关于HttpGet头的Range字段:

Request only part of an entity. Bytes are numbered from 0.

【讨论】:

  • 这样做有什么注意事项吗?哪些类型的服务器/协议无法从某些字节启动下载。另外,我如何获取请求的字节长度,因为在我对偏移量做出假设之前我需要知道这一点
  • 对于实例,如果您存储部分文件,偏移量将是存储的字节数
【解决方案2】:

正如凯尔对您的问题发表的评论一样,您可以查看this answer

基本原则是在您对文件的 (http) 请求中添加标头

 "Range", "bytes="+(file_length_to_start_from) +"-" + (file_length_to_stop)

或者您可以省略 file_length_to_stop(在链接的答案示例中)以从那时起获取文件的其余部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多