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:\app\result.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); }
public void TransFile(IAsyncResult ar) { FileInfo file = ar.AsyncState as FileInfo; try { _requestStream = _uploadRequest.EndGetRequestStream(ar); _fileStream = File.OpenRead(file.FullName); byte[] buffer = new byte[1024]; int bytesRead; if (_currLength < file.Length) { //设置Position _fileStream.Seek(_currLength, SeekOrigin.Begin); while (true) { if (_abort) { _uploadRequest.Abort(); break; } bytesRead = _fileStream.Read(buffer, 0, buffer.Length); if (bytesRead == 0) { break; } _requestStream.Write(buffer, 0, bytesRead); _currLength += bytesRead; } } RomoveFile(file); //添加到已完成列表中 if (!_abort) { _uploadedFiles.Add(file); } if (!_abort) { _uploadRequest.BeginGetResponse(new AsyncCallback(UploadNextFile), null); } else { UploadFile(null); } } catch (Exception e) { _result = e.Message; RomoveFile(file); UploadFile(null); } }
private void EndGetStreamCallback(IAsyncResult ar) { Stream requestStream = null; // End the asynchronous call to get the request stream. try { requestStream = request.EndGetRequestStream(ar); } // Return exceptions to the main application thread. catch (Exception e) { Console.WriteLine("Could not get the request stream."); asyncException = e; wait.Set(); return; } // Write the file contents to the request stream. requestStream.Write(fileContents, 0, fileContents.Length); Console.WriteLine ("Writing {0} bytes to the stream.", fileContents.Length); // IMPORTANT: Close the request stream before sending the request. requestStream.Close(); }
private static MemoryStream DoOldStyleAsync(FtpWebRequest request, MemoryStream requestBody) { if (requestBody != null) { IAsyncResult ar = request.BeginGetRequestStream(null, null); ar.AsyncWaitHandle.WaitOne(); Stream requestStream = request.EndGetRequestStream(ar); requestBody.CopyTo(requestStream); requestStream.Close(); } IAsyncResult ar2 = request.BeginGetResponse(null, null); ar2.AsyncWaitHandle.WaitOne(); FtpWebResponse response = (FtpWebResponse)request.EndGetResponse(ar2); MemoryStream responseBody = new MemoryStream(); response.GetResponseStream().CopyTo(responseBody); response.Close(); return(responseBody); }
private static MemoryStream DoOldStyleAsync(FtpWebRequest request, MemoryStream requestBody) { if (requestBody != null) { IAsyncResult ar = request.BeginGetRequestStream(null, null); ar.AsyncWaitHandle.WaitOne(); Stream requestStream = request.EndGetRequestStream(ar); requestBody.CopyTo(requestStream); requestStream.Close(); } IAsyncResult ar2 = request.BeginGetResponse(null, null); ar2.AsyncWaitHandle.WaitOne(); FtpWebResponse response = (FtpWebResponse)request.EndGetResponse(ar2); MemoryStream responseBody = new MemoryStream(); response.GetResponseStream().CopyTo(responseBody); response.Close(); return responseBody; }