【问题标题】:How to download a file in pieces with many threads如何下载具有多个线程的文件
【发布时间】:2010-02-01 11:02:46
【问题描述】:

我需要使用不同的线程从网站下载文件并一次下载文件的不同部分,我知道我可以使用 Webclient.downloadfile 方法,但它不支持分块下载文件。如果你能指出一个教程或给我一个关于如何做的想法,我将不胜感激。谢谢!

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    另一端的服务器,即提供文件的服务器,也必须支持分块下载。它需要某种方式来指定要从文件中的哪个字节位置开始,而不是从第一个开始并发送,直到客户端停止接受它们,或者它到达文件末尾。

    假设服务器确实支持这一点,他们会提供一些关于如何使用它的文档,您肯定会在这里找到帮助,将其转化为代码。

    【讨论】:

      【解决方案2】:

      要借鉴 Rex 的答案,没有万无一失的方法可以知道。一些 Web 服务器会为您提供内容长度,或者一些会返回 -1 作为长度。烦人,我知道..

      您最好的选择是指定一个固定范围并利用一些启发式或分析来确定随着时间的推移您的块的估计长度。

      您还需要在Multipart Downloading in C# 上查看类似的 SO 问题。

      【讨论】:

        【解决方案3】:

        WebClient 对象有一个“Headers”属性,它应该允许您定义一个'Range' header 以仅请求文件的一部分。

        【讨论】:

          【解决方案4】:

          这里有很多 ifs,但是如果你正在下载一个巨大的文本文件,你实际上可以在服务器上将它分成许多文件,并将每个文件的地址返回给客户端(或使用文件名约定并只报告有多少个部分),然后客户端可以启动线程来下载每个部分,然后它可以将其重新组合成一个单独的大文件。

          我不确定您的用例,但如果是这样的话,这种特殊情况可能不会让任何事情变得更快。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-04
            • 1970-01-01
            • 1970-01-01
            • 2017-12-16
            • 1970-01-01
            相关资源
            最近更新 更多