C#异步文件上传

发布时间:2018-07-02 03:27:12   来源:文档文库   
字号:

FTP异步文件上传

C# Ftp异步上传实现类有WebClient 和FtpWebRequest两种

WebClient 方式

1.异步调用方法及作用

a) WebClient.UploadDataAsync方法
将数据缓冲区上载到指定的资源

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

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

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

2.WebClient异步上传实现步骤:


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

3.WebClient异步上传实现代码

private void WebClientUpload()

{

WebClient request = new WebClient();

///注册完成事件,以便上传完成时,收到通知

request.UploadDataCompleted += new UploadDataCompletedEventHandler(request_UploadDataCompleted);

string ftpUser = "user";

string ftpPassWord = "pwd";

request.Credentials = new NetworkCredential(ftpUser, ftpPassWord);

FileStream myStream = new FileStream(@"D:\log.txt", FileMode.Open, FileAccess.Read);

byte[] dataByte = new byte[myStream.Length];

myStream.Read(dataByte, 0, dataByte.Length);

myStream.Close();

Uri uri = new Uri("ftp://192.168.1.2/uat/dn/log.txt");

request.UploadDataAsync(uri, "STOR", dataByte, dataByte);

}

void request_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)

{

//接收UploadDataAsync传递过来的用户定义对象

byte[] dataByte = (byte[])e.UserState;

string message= string.empty;

//AsyncCompletedEventArgs.Error属性,获取一个值,该值指示异步操作期间发生的错误 if (e.Error == null)

{

message = string.Format("上传成功!文件大小{0} ", dataByte.Length);

}

else

{

message = e.Error.Message;

}

}

FtpWebRequest方式

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

2.异步上传Demo

private void FtpWebRequestUpload()

{

Uri uri = new Uri("ftp://192.168.1.2/uat/dn/log2.txt");

string ftpUser = "user";

string ftpPassWord = "pwd";

//定义FtpWebRequest,并设置相关属性

FtpWebRequest uploadRequest = (FtpWebRequest)WebRequest.Create(uri);

uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;

uploadRequest.Credentials = new NetworkCredential(ftpUser, ftpPassWord);

uploadRequest.BeginGetRequestStream(new AsyncCallback(EndGetStreamCallback), uploadRequest);

}

private void EndGetStreamCallback(IAsyncResult ar)

{

FtpWebRequest uploadRequest = (FtpWebRequest)ar.AsyncState;

///结束由BeginGetRequestStream启动的挂起的异步操作

//必须调用EndGetRequestStream方法来完成异步操作

//通常EndGetRequestStreamcallback所引用的方法调用

Stream requestStream = uploadRequest.EndGetRequestStream(ar);

FileStream fileStream = File.Open(@"D:\log.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);

}

本文来源:https://www.2haoxitong.net/k/doc/8f29a103cc175527072208d9.html

《C#异步文件上传.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式