使用WebClient实现文件下载

.Net2.0中新增了很多组件,WebClient就是其中一个,功能也很强大,今天拿WebClient做了一个小实验,只用到了一些很简单的功能就可以实现以前不好实现的功能,很方便。

简单介绍一下WebClient:
WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法。
WebClient 类使用 WebRequest 类提供对资源的访问。WebClient 实例可以通过任何已向 WebRequest.RegisterPrefix 方法注册的 WebRequest 子代访问数据。
注意
默认情况下,.NET Framework 支持以 http:、https:、ftp:、和 file: 方案标识符开头的 URI。

下面描述用于将数据上载到资源的 WebClient 方法:
OpenWrite检索一个用于将数据发送到资源的 Stream。
OpenWriteAsync检索 Stream,它在不阻止调用线程的情况下将数据发送到资源。
UploadData将字节数组发送到资源,并返回包含任何响应的 Byte 数组。
UploadDataAsync在不阻止调用线程的情况下,将 Byte 数组发送到资源。
UploadFile将本地文件发送到资源,并返回包含任何响应的 Byte 数组。
UploadFileAsync在不阻止调用线程的情况下,将本地文件发送到资源。
UploadValues将 NameValueCollection 发送到资源,并返回包含任何响应的 Byte 数组。
UploadValuesAsync在不阻止调用线程的情况下,将 NameValueCollection 发送到资源,并返回包含任何响应的 Byte 数组。
UploadString在不阻止调用线程的情况下,将 String 发送到资源。
UploadStringAsync在不阻止调用线程的情况下,将 String 发送到资源。

下面描述从资源下载数据的 WebClient 方法:
OpenRead从资源以 Stream 的形式返回数据。
OpenReadAsync在不阻止调用线程的情况下,从资源返回数据。
DownloadData从资源下载数据并返回 Byte 数组。
DownloadDataAsync在不阻止调用线程的情况下,从资源下载数据并返回 Byte 数组。
DownloadFile从资源将数据下载到本地文件。
DownloadFileAsync在不阻止调用线程的情况下,将数据从资源下载到本地文件。
DownloadString从资源下载 String 并返回 String。
DownloadStringAsync在不阻止调用线程的情况下,从资源下载 String。

您可以使用 CancelAsync 方法取消尚未完成的异步操作。
默认情况下,WebClient 实例不发送可选的 HTTP 报头。如果您的请求需要可选报头,必须将该报头添加到 Headers 集合。例如,要在响应中保留查询,必须添加用户代理报头。此外,如果用户代理标头丢失,服务器可能返回 500(内部服务器错误)。
在 WebClient 实例中,AllowAutoRedirect 设置为 true。
给继承者的说明 派生类应调用 WebClient 的基类实现,以确保派生类按预期方式工作。

实现源码为:

  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.ComponentModel;
  4. usingSystem.Data;
  5. usingSystem.Drawing;
  6. usingSystem.Text;
  7. usingSystem.Windows.Forms;
  8. usingSystem.Net;
  9. usingSystem.IO;
  10. namespacewiindowsFormsApplication
  11. {
  12. publicpartialclassForm1:Form
  13. {
  14. publicForm1()
  15. {
  16. InitializeComponent();
  17. this.textBox1.Text=@"http://dl-sh-ocn-1.pchome.net/0d/bx/koomail50b8.rar";
  18. }
  19. WebClientwebClient=newWebClient();
  20. privatevoidbtn_down_Click(objectsender,EventArgse)
  21. {
  22. if(webClient.IsBusy)//是否存在正在进行中的Web请求
  23. {
  24. webClient.CancelAsync();
  25. }
  26. //为webClient添加事件
  27. webClient.DownloadProgressChanged+=newDownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
  28. webClient.DownloadFileCompleted+=newAsyncCompletedEventHandler(webClient_DownloadFileCompleted);
  29. //开始下载
  30. webClient.DownloadFileAsync(newUri(this.textBox1.Text),"aa.rar");
  31. }
  32. privatevoidwebClient_DownloadProgressChanged(objectsender,DownloadProgressChangedEventArgse)
  33. {
  34. this.progressBar1.Value=e.ProgressPercentage;
  35. this.lbl_pro.Text=e.ProgressPercentage.ToString()+"%";
  36. this.lbl_detail.Text=string.Format("正在下载文件,完成进度{0}/{1}(字节)"
  37. ,e.BytesReceived
  38. ,e.TotalBytesToReceive);
  39. }
  40. privatevoidwebClient_DownloadFileCompleted(objectsender,AsyncCompletedEventArgse)
  41. {
  42. if(e.Cancelled)
  43. MessageBox.Show("下载被取消!");
  44. else
  45. MessageBox.Show("下载完成!");
  46. }
  47. privatevoidbtn_cancel_Click(objectsender,EventArgse)
  48. {
  49. this.webClient.CancelAsync();
  50. this.webClient.Dispose();
  51. }
  52. }
  53. }

运行界面:

使用WebClient实现文件下载

源文件:http://download.csdn.net/source/759217
参考资料:http://msdn.microsoft.com/zh-cn/library/system.net.webclient(VS.80).aspx

你可能感兴趣的:(client)