11 Eylül 2017 Pazartesi

FtpWebRequest Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Net;
FTP sunucusu "passive mode" olarak çalışıyorken istemci dosya talebinde bulununca rastgele (ephemeral) bir port numarası gönderir ve bu istemcinin bu portu kullanmasını ister. Yani "control connection" ile "data connection" ayrıdır.

Constructor
Şöyle yaparız.
var ftp = (FtpWebRequest)WebRequest.Create (url);
Credentials Alanı
Şöyle yaparız.
ftp.Credentials = new NetworkCredential (ftpUserName, ftpPassWord);
GetRequestStream metodu
Örnek ver. Sunucuya veri göndermek  (upload) için kullanılır.

GetResponseStream metodu
Şöyle yaparız. Sunucunun cevabını okumak için kullanılır.
List<string> lines = new List<string>();

using (FtpWebResponse listResponse = (FtpWebResponse)ftp.GetResponse())
using (Stream listStream = listResponse.GetResponseStream())
using (StreamReader listReader = new StreamReader(listStream))
{
  while (!listReader.EndOfStream)
  {
    lines.Add(listReader.ReadLine());
  }
}
KeepAlive Alanı
Şöyle yaparız.
ftp.KeepAlive = false;
Method Alanı
Şöyle yaparız.
ftp.Method = WebRequestMethods.Ftp.ListDirectory;
Şöyle yaparız.
ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
Şöyle yaparız.
ftp.Method = WebRequestMethods.Ftp.DownloadFile;
UseBinary Alanı
Şöyle yaparız.
ftp.UseBinary = true;
UsePassive Alanı
Şöyle yaparız.
ftp.UsePassive = false;
Örnekler

Örnek
FTP "NLST" komutu ile dizini listeler. Şöyle yaparız.
List<string> files = new List<string>();

//Create FTP request
FtpWebRequest request = FtpWebRequest.Create() as FtpWebRequest;

request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;


FtpWebResponse response = request.GetResponse() as FtpWebResponse;
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);

while (!reader.EndOfStream)
{
  files.Add(reader.ReadLine());
}

//Clean-up
reader.Close();
responseStream.Close(); //redundant
response.Close();

Örnek
Dosyanın büyüklüğünü öğrenmek için şöyle yaparız.
FtpWebRequest request = FtpWebRequest.Create("...") as FtpWebRequest;
//Get the file size
request.Method = WebRequestMethods.Ftp.GetFileSize;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = true; //don't close the connection

int dataLength = (int)request.GetResponse().ContentLength;
Örnek
Dosyayı indirmek için şöyle yaparız.
//Now get the actual data
FtpWebRequest request = FtpWebRequest.Create("...") as FtpWebRequest;

request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false; //close the connection when done


//Streams
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
Stream reader = response.GetResponseStream();
Örnek
Dosya yüklemek için şöyle yaparız.
//Create FTP request
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("...");

request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;

//Load the file
FileStream stream = File.OpenRead(filePath);
byte[] buffer = new byte[stream.Length];

stream.Read(buffer, 0, buffer.Length);
stream.Close();

//Upload file
Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();

Hiç yorum yok:

Yorum Gönder