.net C#中的多部分下载?

c6ubokkw  于 2023-02-20  发布在  .NET
关注(0)|答案(6)|浏览(451)

请原谅我对这个问题一无所知。
我想用C#编写一个应用程序,它可以像DownThemAll一样从服务器下载文件。DownThemall似乎打开了四个到HTTP服务器的连接来下载同一个文件。我只是想知道是否有任何现有的库可以做到这一点。
下面是他们网站上关于此功能的一段引文:
DownThemAll采用了一种叫做"多部分下载"的智能下载技术,它将文件分割成多个部分,然后同时下载。
我也希望能够暂停/恢复下载。这是我想要的基本功能,我不一定需要一个成熟的下载管理器库,但如果有一个可以做这些事情,那么我也想知道他们。文件在一个密码保护的目录与lighttpd托管,所以我也需要一些方法来验证自己。
如果没有任何预先存在的库可以使用,那么我应该查找哪些. net类可以做到这一点?
谢谢!

    • 编辑**:重新编写标题以使其更合适,并添加了来自DownThemAll站点的引用,以解释其内容。
    • 第二次编辑**:我相信svens贴出了目前为止最合适的答案,尽管他在评论中写道:/这是我的错,因为我不知道自己在说什么,所以我把标题写错了。他贴出了一个关于HTTP下载暂停/恢复的article。它还谈到了我认为我应该使用的Range头:

Range头可以在一个请求中请求多个范围,这个特性称为"多部分范围"。不要把它和分段下载混淆,分段下载是几乎所有下载工具用来提高下载速度的。这些工具声称可以通过打开两个或更多的同时连接来提高下载速度,每个连接请求文件的不同范围。
所以我想使用这个范围同时下载文件的某些部分,但这可能比一次下载文件没有任何优势,我只需要这样做,并允许暂停/恢复。
谢谢你们!
P. S. Svens,去吧,把评论贴出来作为答案,这样如果你想的话我就可以接受了。

5kgi1eie

5kgi1eie1#

原谅张贴到一篇文章比基督更古老,但这:
http://www.codeproject.com/Articles/21053/MyDownloader-A-Multi-thread-C-Segmented-Download-M
似乎更接近我们的要求。
当前标记的“正确答案”对于提供服务器端的部分下载例程是很好的,它在某种程度上解释了HTTP范围头的作用,但它不是下载客户端。

5cnsuln7

5cnsuln72#

在这一点上,我同意svens的观点,http://www.devx.com/dotnet/Article/22533/0/page/2似乎说明了一切。

zzzyeukh

zzzyeukh3#

System.Net.HttpClient类应该可以下载你的文件,只要从线程或者线程池中调用这个类,你就可以同时下载很多文件。

62o28rlo

62o28rlo4#

System.Net.WebrequestMethods.Http命名空间是一个很好的起点。您可能希望使用Get来下拉所需的文件。
http://msdn.microsoft.com/en-us/library/system.net.webrequestmethods.http.aspx

i7uq4tfw

i7uq4tfw6#

如果你想使用一个软件包,但又不想自己写这样的东西,你可以使用Nuget上的Shard Download Library,它可以下载一个多部分的文件,要使用它,你必须写这样的东西:

async Task DownloadFileAsync(string fileURL)
{
   //"https://speed.hetzner.de/100MB.bin"

    LoadRequestOptions option = new()
    {
        Progress = new Progress<float>(value => Console.WriteLine(value.ToString("0.0%"))),
        RequestCompleated = path => Console.WriteLine("Finished: " + path?.ToString()),
        Chunks = 8 //«Split the file into chunks/parts
    };
    
    await new LoadRequest(link, option).Task;
}

希望能帮上忙

相关问题