天天看點

使用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. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Net;
  9. using System.IO;
  10. namespace wiindowsFormsApplication
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.             this.textBox1.Text = @"http://dlsw.baidu.com/sw-search-sp/soft/8a/13598/sogou_pinyin_7.1.0.1719.1398407544.exe";//由于原作者的下載下傳位址好似不能下載下傳了  是以我替換了一個搜狗輸入法的下載下傳位址  "http://dl-sh-ocn-1.pchome.net/0d/bx/koomail50b8.rar";
  18.         }
  19.         WebClient webClient = new WebClient();
  20.         private void btn_down_Click(object sender, EventArgs e)
  21.         {
  22.             if (webClient.IsBusy)//是否存在正在進行中的Web請求
  23.             {
  24.                 webClient.CancelAsync();
  25.             }
  26.             //為webClient添加事件
  27.             webClient.DownloadProgressChanged +=new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
  28.             webClient.DownloadFileCompleted+=new AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
  29.             //開始下載下傳
  30.             webClient.DownloadFileAsync(new Uri(this.textBox1.Text), "aa.rar");
  31.         }
  32.         private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
  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.         private void webClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
  41.         {
  42.             if (e.Cancelled)
  43.                 MessageBox.Show("下載下傳被取消!");
  44.             else
  45.                 MessageBox.Show("下載下傳完成!");
  46.         }
  47.         private void btn_cancel_Click(object sender, EventArgs e)
  48.         {
  49.             this.webClient.CancelAsync();
  50.             this.webClient.Dispose();
  51.         }
  52.     }
  53. }

運作界面:

使用WebClient實作檔案下載下傳

我在使用過程中 發現原作者未給出本地下載下傳的格式    是以我補充下

如果是本機下載下傳   隻需要資料檔案路徑即可

例如 G:/a.docx 

如果是區域網路内下載下傳:首先需要将下載下傳檔案所在的電腦設定共享  即共享該檔案

例如   \\192.168.0.83\測試\Test.docx    \\是通路共享的必備條件  192.168.0.83為服務端ip    測試為服務端共享的檔案夾名稱  Test.docx為需要下載下傳的檔案名稱

本文轉載自http://blog.sina.com.cn/s/blog_6e51df7f0100sw6t.html

繼續閱讀