C# FTP 파일 업로드 & 다운로드

devyumi·2025년 4월 29일

.NET

목록 보기
3/4

C#으로 FTP 연결 후 파일 업로드다운로드 방법을 정리한다.

Microsoft 공식 홈페이지에 있는 예제 코드를 활용한다.

FTP Upload


public class WebRequestGetExample
    {
        public static void Main()
        {
            //1) 서버 연결을 위해 요청을 보낸다.
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp_url);

            //2) 연결에 필요한 개인정보와 연결 뒤 수행할 작업을 선택한다.
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(id, password);

            //3) 업로드 할 파일에 대한 Stream을 먼저 열어 데이터를 읽어온 뒤, FtpRequest Stream을 연다.
            using (FileStream fileStream = File.Open("testfile.txt", FileMode.Open, FileAccess.Read))
            {
                using (Stream requestStream = request.GetRequestStream())
                {

                    //4) 응답 받기 전에 업로드 할 데이터를 Request에 저장한다.
                    await fileStream.CopyToAsync(requestStream);

                    //5) 응답 받은 후, 데이터가 업로드 되었는지 확인한다.
                    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                    {
                        Console.WriteLine($"Upload File Complete, status {response.StatusDescription}");
                    }
                }
           }
        }
    }

[추가 설명]

1) WebRequestFtpWebRequest로 타입 캐스팅해야 함으로 as를 사용한 코드로 대체할 수 있다.

as란 C#의 문법으로 지정한 타입으로 캐스팅하는 문법이며, 안전한 타입 변경을 위해 사용한다.

as를 사용하면 캐스팅이 되지 않을 경우 Exception 처리되지 않고, null을 반환한다.

코드 변경 전) (FtpWebRequest) WebRequest request

코드 변경 후) var request = WebRequest.Create(url) as FtpWebRequest;


2) .NET은 FTP 연결 이후 수행할 작업을 메서드로 정의하고 있다.


FTP Download


public class WebRequestGetExample
    {
        public static void Main ()
        {
            //1) 서버 연결을 위해 요청을 보낸다.
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp_url);

            //2) 연결에 필요한 개인정보와 연결 뒤 수행할 작업을 선택한다.
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential(id, password);

            //3) 응답을 반환하여 FTP 서버가 연결되었는지 확인한다.
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            //4) 응답 Stream을 연 뒤, 파일 Stream을 열어 다운할 파일 데이터를 읽어온다.
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream);
            Console.WriteLine(reader.ReadToEnd());

            reader.Close();
            response.Close();
        }
    }

[추가 설명]

2) 다운해야 하는 파일이 많다면 DownloadFile 대신 ListDirectory를 사용하면 된다.

ListDirectory는 Stream으로 파일명을 전달하므로 파일명을 List에 저장한 뒤에

List에 저장한 파일명을 차례로 DownloadFile 하면 FTP 서버에 있는 1개 이상의 파일을 다운할 수 있다.


참고

profile
Back-end Junior Developer 공부하는 개발자

0개의 댓글