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代码:
Javascrpit代码: