c#에서 ftp 다운로드, 업로드 등의 클라이언트 기능을 사용하기 위함.
public void FtpDownload()
{
// 코드 단순화를 위해 하드코드함
string ftpPath = "ftp://ftp.microsoft.com/softlib/index.txt";
string user = "anonymous"; // FTP 익명 로그인시. 아니면 로그인/암호 지정.
string pwd = "";
string outputFile = "index.txt";
// WebRequest.Create로 Http,Ftp,File Request 객체를 모두 생성할 수 있다.
FtpWebRequest req = (FtpWebRequest)WebRequest.Create(ftpPath);
// FTP 다운로드한다는 것을 표시
req.Method = WebRequestMethods.Ftp.DownloadFile;
// 익명 로그인이 아닌 경우 로그인/암호를 제공해야
req.Credentials = new NetworkCredential(user, pwd);
// FTP Request 결과를 가져온다.
using (FtpWebResponse resp = (FtpWebResponse)req.GetResponse())
{
// FTP 결과 스트림
Stream stream = resp.GetResponseStream();
// 결과를 문자열로 읽기 (바이너리로 읽을 수도 있다)
string data;
using (StreamReader reader = new StreamReader(stream))
{
data = reader.ReadToEnd();
}
// 로컬 파일로 출력
File.WriteAllText(outputFile, data);
}
}
우선 WebRequest.Create() 메서드를 사용해 FtpWebRequest 객체 생성.
FtpWebRequest.Method에 UploadFile지정.
쓰기권한이 있는 로그인명 지정.
Stream얻은 후 데이터를 써놓음.
GetRespos()호출
public void FtpUpload()
{
// 코드 단순화를 위해 하드코드함
string ftpPath = "ftp://ftp.test.com/home/myindex.txt";
string user = "ftpuser";
string pwd = "ftppwd";
string inputFile = "index.txt";
// WebRequest.Create로 Http,Ftp,File Request 객체를 모두 생성할 수 있다.
FtpWebRequest req = (FtpWebRequest)WebRequest.Create(ftpPath);
// FTP 업로드한다는 것을 표시
req.Method = WebRequestMethods.Ftp.UploadFile;
// 쓰기 권한이 있는 FTP 사용자 로그인 지정
req.Credentials = new NetworkCredential(user, pwd);
// 입력파일을 바이트 배열로 읽음
byte[] data;
using (StreamReader reader = new StreamReader(inputFile))
{
data = Encoding.UTF8.GetBytes(reader.ReadToEnd());
}
// RequestStream에 데이타를 쓴다
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
}
// FTP Upload 실행
using (FtpWebResponse resp = (FtpWebResponse)req.GetResponse())
{
// FTP 결과 상태 출력
Console.WriteLine("Upload: {0}", resp.StatusDescription);
}
}
여러 작업들을 병렬로 처리하는 기능을 제공
public void FtpDownloadUsingWebClient()
{
string ftpPath = "ftp://ftp.test.com/home/bin/Home.dll";
string user = "ftpuser"; // FTP 사용자 로그인
string pwd = "ftppwd";
string outputFile = "Home.dll";
// WebClient 객체 생성
using (WebClient cli = new WebClient())
{
// FTP 사용자 설정
cli.Credentials = new NetworkCredential(user, pwd);
// FTP 다운로드 실행
cli.DownloadFile(ftpPath, outputFile);
// FTP 업로드 실행
// cli.UploadFile(ftpPath, outputFile);
}
}