WebClient 三

WebClient(1,2)中只要介绍了关于通过方法OpenRead 和OpenReadAsync 获取数据流,读取Url资源数据流外,WebClient还包括其他方法读取资源

如:DownloadData 和DowloadDataAsync 读取数据流,单核心本质上和openRead没有任何区别,起始还是通过webRequest 和webResponse 获取数据流,

DownloadDate 只是把数量流转换成byte [] 数据,DownloadString 和DownloadStringAsync 起始就是对DownLoadData 直接调用方法。

具体实现和代码做如下:

            


   WebClient webclient  =   new  WebClient();
             byte [] byteData  =  webclient.DownloadData( " http://www.cnblogs.com/ " );
             string  result  =  System.Text.Encoding.UTF8.GetString(byteData);
            AppLog.Write(result, AppLog.LogMessageType.Info);

             // 异步调用
            webclient.DownloadDataCompleted  +=   new  DownloadDataCompletedEventHandler(DownDataCallback);
            webclient.DownloadDataAsync( new  Uri( " http://www.cnblogs.com/ " ));
  public   static   void  DownDataCallback(Object sender, DownloadDataCompletedEventArgs e)
        {
             byte [] reply;
            reply  =  ( byte [])e.Result;
             string  strResult  =  System.Text.Encoding.UTF8.GetString(reply);
            AppLog.Write(strResult, AppLog.LogMessageType.Info);
        }

Webclient DowloadData 中具体是通过通过webRequest 和webResponse 读取指定url数据流,其中本质上和OpenRead() 基本相同,

主要的区别是DownloadData读取数据流抓换成二进制数据byte[],具体实现原代码是怎样呢,以下是DownloadData 的核心代码如下:

 

  1             WebRequest request = WebRequest.Create("address") ;

 2              WebResponse response  =  request.GetResponse();
 3              Stream stream  =  response.GetResponseStream();
 4               int  length  =  ( int )response.ContentLength;
 5              MemoryStream ms  =   null ;
 6               bool  nolength  =  (length  ==   - 1 );
 7               int  size  =  ((nolength)  ?   8192  : length);
 8               if  (nolength)
 9                  ms  =   new  MemoryStream();
10  ;
11               int  nread  =   0 ;
12               int  offset  =   0 ;
13               byte [] buffer  =   new   byte [size];
14               while  ((nread  =  stream.Read(buffer, offset, size))  !=   0 )
15              {
16                   if  (nolength)
17                  {
18                      ms.Write(buffer,  0 , nread);
19                  }
20                   else
21                  {
22                      offset  +=  nread;
23                      size  -=  nread;
24                  }
25                   if  (async)   // 异步读取数据
26                  {
27                      OnDownloadProgressChanged( new  DownloadProgressChangedEventArgs(nread, length, userToken));
28                  }
29              }

 

和DownloadData  类型DownloadString 功能类型,后者组要是调用前者实现其功能的,看如下DownloaString 代码如下:

 

     1             WebClient webclient = new WebClient();

 2               string  result  =  webclient.DownloadString( " http://www.cnblogs.com/ " );
 3              AppLog.Write(result, AppLog.LogMessageType.Error);
 4 
 5 
 6               // 异步调用
 7              webclient.DownloadDataCompleted  +=   new  DownloadDataCompletedEventHandler(DownDataCallback);
 8              webclient.DownloadDataAsync( new  Uri( " http://www.cnblogs.com/ " ));
 9 
10 
11 
12           public   static   void  DownloadStringCallBack( object  sender, DownloadStringCompletedEventArgs e)
13          {
14               string  result  =  e.Result.ToString();
15             AppLog.Write(result, AppLog.LogMessageType.Error);

16         }

 除了实现方法相似外,DownloadString 代码是通过调用方法是通过   encoding.GetString (DownloadData (CreateUri (address))) ,把括DownloadStringAsyn 异步方法也是调用DownloadData 实现其功能。另外还有方法DownloadFile 和 DownloadFileAsync 是制定url 资源下载数据,也是读取数据流,然后保存在本地文件而已,具体功能更

和势力代码如下:由于功能类型,在这里就不再多做解释,把实例代码贴出来供大家参考。 

 

  1  

 2  string  fileName  =   string .Format( " {0}//{1}.txt " , Server.MapPath( " Log " ), DateTime.Now.ToString( " ddHHssss " ));
 3              webclient.DownloadFile( " http://www.cnblogs.com/ " , fileName);
 4 
 5               // 异步调用
 6              webclient.DownloadFileCompleted  +=   new  System.ComponentModel.AsyncCompletedEventHandler(DownloadFileCompletedCallback);
 7              webclient.DownloadProgressChanged  +=   new  DownloadProgressChangedEventHandler(DownloadProgressCallback);
 8              webclient.DownloadFileAsync( new  Uri( " http://www.cnblogs.com/ " ), fileName)
 9 
10           static   void  DownloadProgressCallback( object  sender, DownloadProgressChangedEventArgs e)
11          {
12   
13               string  progress  =   string .Format( " {0}    downloaded {1} of {2} bytes. {3} % complete... " ,
14                  ( string )e.UserState,e.BytesReceived,e.TotalBytesToReceive, e.ProgressPercentage);
15              AppLog.Write(progress, AppLog.LogMessageType.Error);
16          }

 

 以上是读取去资源数据信息到本地,如果想上传到指定url指定资源信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值