当前位置:文档之家› C#异步文件上传

C#异步文件上传

C#异步文件上传
C#异步文件上传

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[])https://www.doczj.com/doc/8118123147.html,erState;

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方法来完成异步操作

//通常EndGetRequestStream由callback所引用的方法调用

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);

}

html5 上传文件功能的代码实现

html5 上传文件功能的代码实现 Html5代码:

上传者:
Javascrpit代码: