/// <summary> /// FTP 서버에 있는 원격 파일을 다운로드하여, <paramref name="localStream"/>에 씁니다. /// </summary> /// <param name="ftpClient"></param> /// <param name="remoteFilename"></param> /// <param name="localStream"></param> /// <returns></returns> public static Task <bool> DownloadTask(this FtpClient ftpClient, string remoteFilename, Stream localStream) { localStream.ShouldNotBeNull("localStream"); if (IsDebugEnabled) { log.Debug("원격 파일을 다운로드 받는 작업을 생성합니다... remoteFilename=[{0}]", remoteFilename); } remoteFilename = ftpClient.AdjustRemoteFilename(remoteFilename); var uri = ftpClient.Hostname + remoteFilename; return (ftpClient .GetResponseStreamTask(uri, WebRequestMethods.Ftp.DownloadFile) .ContinueWith(task => { task.Result.CopyStreamToStream(localStream); task.Result.Close(); if (IsDebugEnabled) { log.Debug("원격 파일 다운로드가 완료되었습니다. remoteFilename=[{0}]", remoteFilename); } return true; }, TaskContinuationOptions.ExecuteSynchronously)); }
/// <summary> /// 응답 스트림을 얻고, 문자열로 변환하여 반환합니다. /// </summary> /// <param name="ftpClient"></param> /// <param name="uri"></param> /// <param name="method"></param> /// <returns></returns> public static Task <string> GetResponseStringTask(this FtpClient ftpClient, string uri, string method) { return (ftpClient .GetResponseStreamTask(uri, method) .ContinueWith(task => { var result = task.Result.ToText(); task.Result.Close(); return result; }, TaskContinuationOptions.ExecuteSynchronously)); }