当前位置: 首页 > 编程语言 > C#

从.NET下载大文件并在.NET中使用恢复-重试支持?分享

时间:2023-04-10 14:08:49 C#

从.NET下载大文件并在.NET中使用恢复/重试支持?如何在我的应用程序中实现从HTTP下载大文件(~500MB)?我想支持自动恢复/重试,这样当连接断开时,我的应用程序可以尝试重新连接以获取文件并避免重新下载已下载的部分,如果可能的话(我知道,这也取决于服务器).这类似于下载管理器和某些浏览器中的行为。您可以通过以下两种方式之一从C#的Web服务器开始下载:使用System.Net中的高级API,例如HttpWebRequest、HttpWebResponse、FtpWebRequest和其他类。使用System.Net.Sockets中的低级API,例如TcpClient、TcpListener和Socket类。使用第一种方法的优点是您通常不必担心低级管道,例如准备和解释HTTP标头以及处理代理、身份验证、缓存等。更高级别的类会为您完成这些工作,所以我更喜欢这种方法。使用第一种方法,准备从URL下载文件的HTTP请求的典型代码如下所示:HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(Url);如果(UseProxy){request.Proxy=newWebProxy(ProxyServer+":"+ProxyPort.ToString());if(ProxyUsername.Length>0)request.Proxy.Credentials=newNetworkCredential(ProxyUsername,ProxyPassword);}//HttpWebRequesthrequest=(HttpWebRequest)request;//hrequest.AddRange(BytesRead);::TODO:处理此问题if(BytesRead>0)request.AddRange(BytesRead);WebResponse响应=request.GetResponse();//result.MimeType=res.ContentType;//result.LastModified=response.LastModified;if(!resuming)//(Size==0){//resuming=false;Size=(int)response.ContentLength;SizeInKB=(int)Size/1024;}acceptRanges=String.Compare(response.Headers["Accept-Ranges"],"bytes",true)==0;//创建网络流ns=response.GetResponseStream();在上述代码的最后,您将获得一个网络流对象,然后您可以使用该对象读取远程文件的字节,就像您读取任何其他流对象一样。现在,远程URL是否支持通过允许您从任意位置读取来恢复部分下载由“Accept-Ranges”HTTP标头确定,如上所示。如果此值设置为“字节”以外的任何值,则不支持此功能。事实上,这段代码是我试图用C#实现的一个更大的开源下载管理器的一部分。您可以参考这个应用程序,看看是否有什么帮助您:http://scavenger.codeplex.com/具有自动恢复/重试支持(如果服务器支持)的开源.Nethttp文件下载器,看起来它正是你需要,试试看:https://github.com/Avira/.NetFileDownloader。有一个Internet下载管理器可以支持您处理此问题。下载IDMCOMAPI.zip,然后使用(Tlbimp)类型库导入程序,从解压缩的zip中导入文件IDManTypeInfo.tlb。cmd:C:ProgramFilesMicrosoftSDKsWindowsv7.1BinTlbExp.exe(FilePathGoesHere)IDManTypeInfo.tlb备案:1.)您应该在管理员模式下运行命令提示符。2.)一些文件没有还原功能。以上是C#学习教程:Downloadlargefilesfrom.NETanduseresume/retrysupportin.NET?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: