/// <summary> /// /// </summary> /// <param name="source"></param> /// <param name="destination"></param> /// <returns></returns> public IExternalResult UploadFile(FileInfo source, string destination) { using (var _source = source.OpenRead()) { if (_source.CanRead) { var _resource = new Uri(string.Format("{0}/{1}", Host, destination)); var _request = CreateRequest(_resource, WebRequestMethods.Ftp.UploadFile); using (var _context = new ExternalActionContext(_request, false, BUFFER_SIZE, false, _source)) { _context.BeginGetRequestStream(x => AsyncGetRequestStreamCallback(x)); _waitHandle.WaitOne(); _waitHandle.Reset(); return(_context.Result); } } _source.Dispose(); } return(new FtpResult()); }
/// <summary> /// /// </summary> /// <param name="source"></param> /// <param name="destination"></param> /// <param name="userToken"></param> public void DownloadFileAsync(string source, FileStream destination, object userToken) { if (destination.CanWrite) { var _resource = new Uri(string.Format("{0}/{1}", Host, source)); var _length = GetContentLength(_resource); var _request = CreateRequest(_resource, WebRequestMethods.Ftp.DownloadFile); var _context = new ExternalActionContext(_request, true, BUFFER_SIZE, destination, userToken, _length); _context.BeginGetResponse(x => AsyncGetResponseCallback(x)); } }
/// <summary> /// /// </summary> /// <param name="source"></param> /// <param name="destination"></param> /// <param name="userToken"></param> public void UploadFileAsync(FileInfo source, string destination, object userToken) { var _fileStream = source.OpenRead(); if (_fileStream.CanRead) { var _resource = new Uri(string.Format("{0}/{1}", Host, destination)); var _request = CreateRequest(_resource, WebRequestMethods.Ftp.UploadFile); var _context = new ExternalActionContext(_request, true, BUFFER_SIZE, false, _fileStream, userToken); _context.BeginGetRequestStream(x => AsyncGetRequestStreamCallback(x)); } }
/// <summary> /// /// </summary> /// <param name="source"></param> /// <returns></returns> long GetContentLength(Uri source) { var _request = CreateRequest(source, WebRequestMethods.Ftp.GetFileSize); using (var _context = new ExternalActionContext(_request, false, BUFFER_SIZE, false)) { _context.BeginGetResponse(x => AsyncGetResponseCallback(x)); _waitHandle.WaitOne(); _waitHandle.Reset(); return(_context.ContentLength); } }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <returns></returns> public bool ExistDirectory(string path) { var _resource = new Uri(string.Format("{0}/{1}", Host, path)); var _request = CreateRequest(_resource, WebRequestMethods.Ftp.ListDirectory); using (var _context = new ExternalActionContext(_request, false, BUFFER_SIZE, false)) { _context.BeginGetResponse(x => AsyncGetResponseCallback(x)); _waitHandle.WaitOne(); _waitHandle.Reset(); return(!(_context.Result as FtpResult).ErrorCode.Equals(FtpStatusCode.ActionNotTakenFileUnavailable)); } }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <returns></returns> public IExternalResult CreateDirectory(string path) { var _resource = new Uri(string.Format("{0}/{1}", Host, path)); var _request = CreateRequest(_resource, WebRequestMethods.Ftp.MakeDirectory); using (var _context = new ExternalActionContext(_request, false, BUFFER_SIZE, false)) { _context.BeginGetResponse(x => AsyncGetResponseCallback(x)); _waitHandle.WaitOne(); _waitHandle.Reset(); return(_context.Result); } }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="ex"></param> void HandleThrownException(ExternalActionContext context, Exception ex) { context.Result = FtpResult.Parse(ex); if (null != context) { context.Dispose(); } if (null != _waitHandle) { _waitHandle.Set(); } RaiseActionFailedEvent(context); }
/// <summary> /// /// </summary> /// <param name="source"></param> /// <param name="destination"></param> /// <returns></returns> public IExternalResult DownloadFile(string source, FileStream destination) { if (destination.CanWrite) { var _resource = new Uri(string.Format("{0}/{1}", Host, source)); var _length = GetContentLength(_resource); var _request = CreateRequest(_resource, WebRequestMethods.Ftp.DownloadFile); using (var _context = new ExternalActionContext(_request, false, BUFFER_SIZE, destination, null, _length)) { _context.BeginGetResponse(x => AsyncGetResponseCallback(x)); _waitHandle.WaitOne(); _waitHandle.Reset(); return(_context.Result); } } return(new FtpResult()); }
/// <summary> /// /// </summary> /// <param name="context"></param> void RaiseActionProgressChangedEvent(ExternalActionContext context) { if (context.IsAsync) { if (WebRequestMethods.Ftp.UploadFile.Equals(context.Method)) { if (null != UploadProgressChanged) { var _args = new ExternalUploadProgressChangedEventArgs(context); UploadProgressChanged(this, _args); } } else if (WebRequestMethods.Ftp.DownloadFile.Equals(context.Method)) { if (null != DownloadProgressChanged) { var _args = new ExternalDownloadProgressChangedEventArgs(context); DownloadProgressChanged(this, _args); } } } }