相关文章导航
  1. Sql Server2005 Transact-SQL 新兵器学习总结之-总结
  2. Flex,Fms3相关文章索引
  3. FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8>

 

 

上一篇中介绍的文件上传下载都是基于同步操作.本篇将就异步操作做个总结.
本篇主要总结WebClient类异步上传实现方式和FtpWebRequest类异步上传实现方式,其实明白了异步上传,异步下载就是同样的道理实现.

1.WebClient异步上传
关键知识说明:
WebClient类提供4个异步上传方法,使用方法都是差不多的.
WebClient.UploadDataAsync方法
将数据缓冲区上载到指定的资源

WebClient.UploadFileAsync方法
将指定的本地文件上载到指定的资源

WebClient.UploadStringAsync方法
将指定的字符串上载到指定的资源

WebClient.UploadValuesAsync方法
将指定的名称/值集合上载到指定的资源

其中一个方法签名如下:
public void UploadDataAsync (
 Uri address,
 string method,
 byte[] data,
 Object userToken
)
参数
address
接收数据的资源的URI
method
用于将文件发送到资源的HTTP方法。如果为空,则对于http默认值为POST,对于ftp默认值为STOR
data
要发送到资源的数据缓冲
userToken
一个用户定义对象,此对象将被传递给完成异步操作时所调用的方法

若要在数据的上载完成时收到通知,需要实现WebClient.UploadDataCompleted事件,此事件在每次完成异步数据上载操作时引发

总结WebClient异步上传实现步骤:
第一步:定义WebClient,设置各属性
第二步:注册完成事件UploadDataCompleted,以便完成上传时回调
第三步:调用UploadDataAsync方法开始异步上传文件
第四步:上传文件完成回调完成事件UploadDataCompleted定义的方法

实例代码:
把D:\n.txt文件上传到ftp://ftp.dygs2b.com

WebClient request = new WebClient ( );

//注册完成事件,以便上传完成时,收到通知
request.UploadDataCompleted += new UploadDataCompletedEventHandler ( request_UploadDataCompleted );

string ftpUser = "a";
string ftpPassWord = "b";
request.Credentials 
= new NetworkCredential ( ftpUser , ftpPassWord );

FileStream myStream 
= new FileStream ( @"D:\n.txt" , FileMode.Open , FileAccess.Read );
byte [ ] dataByte = new byte [ myStream.Length ];
myStream.Read ( dataByte , 
0 , dataByte.Length );        //写到2进制数组中
myStream.Close ( );

Uri uri 
= new Uri ( "ftp://ftp.dygs2b.com/n.txt" );
request.UploadDataAsync ( uri , 
"STOR" , dataByte , dataByte );

void request_UploadDataCompleted ( object sender , UploadDataCompletedEventArgs e )
{
    
//接收UploadDataAsync传递过来的用户定义对象
    byte [ ] dataByte = ( byte [ ] ) e.UserState;

    
//AsyncCompletedEventArgs.Error属性,获取一个值,该值指示异步操作期间发生的错误
    if ( e.Error == null )
    {
        MessageBox.Show ( 
string.Format ( "上传成功!文件大小{0}" , dataByte.Length ) );
    }
    
else
    {
        MessageBox.Show ( e.Error.Message );
    }
}

 

 

2.FtpWebRequest异步上传
使用FtpWebRequest对象向服务器上载文件,则必须将文件内容写入请求流,同步请求流是通过调用GetRequestStream方法,而异步对应方法是BeginGetRequestStream和EndGetRequestStream方法.

其中BeginGetRequestStream方法签名如下:
public override IAsyncResult BeginGetRequestStream (
 AsyncCallback callback,
 Object state
)

参数
callback
一个 AsyncCallback 委托,它引用操作完成时要调用的方法
state
一个用户定义对象,其中包含该操作的相关信息。当操作完成时,此对象会被传递给callback委托

必须调用EndGetRequestStream方法用来完成异步操作。通常,EndGetRequestStream由callback所引用的方法调用。

总结FtpWebRequest异步上传实现步骤:
第一步:定义FtpWebRequest,并设置相关属性
第二步:调用FtpWebRequest.BeginGetRequestStream方法,定义操作完成时要调用的方法EndGetResponseCallback,开始以异步方式打开请求的内容流以便写入.
第三步:实现EndGetResponseCallback方法,在此方法中调用FtpWebRequest.EndGetRequestStream方法,结束由BeginGetRequestStream启动的挂起的异步操作,再把本地的文件流数据写到请求流(RequestStream)中,再FtpWebRequest.BeginGetResponse方法,定义操作完成时要调用的方法EndGetResponseCallback,开始以异步方式向FTP服务器发送请求并从FTP服务器接收响应.
第四步:实现EndGetResponseCallback方法,在此方法中调用FtpWebRequest.EndGetResponse方法,结束由BeginGetResponse启动的挂起的异步操作.

实例代码:
把D:\n.txt文件上传到ftp://ftp.dygs2b.com

Uri uri = new Uri ( "ftp://ftp.dygs2b.com/n.txt" );

//定义FtpWebRequest,并设置相关属性
FtpWebRequest uploadRequest = ( FtpWebRequest ) WebRequest.Create ( uri );
uploadRequest.Method 
= WebRequestMethods.Ftp.UploadFile;

string ftpUser = "a";
string ftpPassWord = "b";
uploadRequest.Credentials 
= new NetworkCredential ( ftpUser , ftpPassWord );

//开始以异步方式打开请求的内容流以便写入
uploadRequest.BeginGetRequestStream ( new AsyncCallback ( EndGetStreamCallback ) , uploadRequest );

 

private void EndGetStreamCallback ( IAsyncResult ar )
{
    
//用户定义对象,其中包含该操作的相关信息,在这里得到FtpWebRequest
    FtpWebRequest uploadRequest = ( FtpWebRequest ) ar.AsyncState;

    
//结束由BeginGetRequestStream启动的挂起的异步操作
    
//必须调用EndGetRequestStream方法来完成异步操作
    
//通常EndGetRequestStream由callback所引用的方法调用
    Stream requestStream = uploadRequest.EndGetRequestStream ( ar );

    FileStream fileStream 
= File.Open ( @"D:\n.txt" , FileMode.Open );

    
byte [ ] buffer = new byte [ 1024 ];
    
int bytesRead;
    
while ( true )
    {
        bytesRead 
= fileStream.Read ( buffer , 0 , buffer.Length );
        
if ( bytesRead == 0 )
            
break;

        
//本地的文件流数据写到请求流
        requestStream.Write ( buffer , 0 , bytesRead );
    }

    requestStream.Close ( );
    fileStream.Close ( );

    
//开始以异步方式向FTP服务器发送请求并从FTP服务器接收响应
    uploadRequest.BeginGetResponse ( new AsyncCallback ( EndGetResponseCallback ) , uploadRequest );
}

private void EndGetResponseCallback ( IAsyncResult ar )
{
    FtpWebRequest uploadRequest 
= ( FtpWebRequest ) ar.AsyncState;

    
//结束由BeginGetResponse启动的挂起的异步操作
    FtpWebResponse uploadResponse = ( FtpWebResponse ) uploadRequest.EndGetResponse ( ar );

    MessageBox.Show ( uploadResponse.StatusDescription );
    MessageBox.Show ( 
"Upload complete" );
}
上篇文章链接


http://aierong.cnblogs.com


Sql Server2005 Transact-SQL 新兵器学习总结之-总结
MS SQL数据库备份和恢复存储过程(加强版本)
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
WAP开发资料站(最新更新)
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
Mcad学习笔记之序列化(2进制和Soap序列化)
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨)
WinForm开发,窗体显示和窗体传值相关知识总结
Mcad学习笔记之Microsoft Windows服务
copy某目錄下的所有的目錄和文件到目的目錄(目錄數據備份)
ASP.NET状态管理之一(概括篇)

 

 

收藏与分享

收藏到QQ书签 Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2 添加到百度搜藏 Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2添加到雅虎收藏 Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2 Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2 Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2

RSS订阅我 什么是RSS?

Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2
Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2
Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2
Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2   Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2

东莞.net俱乐部

Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2 欢迎您的加入

相关文章: