1. Ana Sayfa
  2. C Sharp

C# FTP Server Dosyayı İndirmeden Göstermek

C# FTP Server Dosyayı İndirmeden Göstermek
C# FTP Server Dosyayı İndirmeden Göstermek
+ - 0

C# FTP Server Dosyayı İndirmeden Göstermek, dersim ile C# Eğitim Setime devam ediyorum. Bu yazım C# İle FTP Üzerine İşlemler yazı serimin 9. yazısıdır.

C# FTP Server Dosyayı İndirmeden Göstermek

Önceki yazım olan C# FTP Server Dosya İndirmek  yazımda ftp servere bağlanıp bir dosya indirmek hakkında bilgiler vermiştim. Bu yazımda C# ile bir ftp server ‘e bağlanıp dosyayı fiziksel olarak indirmeden gösterme işlemini göreceğiz.

string  FTPDosyaYolu = "ftp:/88.88.88.88:8888//FTP_Files";
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(FTPDosyaYolu);

string username = "kullaniciadi";
string password = "şifre";
request.Credentials = new NetworkCredential(username, password);

request.UsePassive = true; // pasif olarak kullanabilme
request.UseBinary = true; // aktarım binary ile olacak
request.KeepAlive = false; // sürekli açık tutma

Bağlantı bilgilerimizi bunlardı.

 request.Method = WebRequestMethods.Ftp.DownloadFile;

Dosya download yani indirmek için gerekli metodumuz bu şekilde. Bu konumızda da metodumuz DownladFile olacak

Dosya indirme işlemi yaparken FileStream ve Stream sınıfını kullanarak yapacağız.

Stream sınıfını kullanabilmek için aşağıdaki kütüphaneyi eklememiz gerekiyor.

using System.IO;

Kodlarımızı verelim. Bu işlem için iki metodumuz var.

        public static MemoryStream FTP_Dosya_Getir(string filePath)
        {
            UploadGetir();
            try
            {
                FtpWebRequest request2 = (FtpWebRequest)FtpWebRequest.Create(filePath);
                request2.Method = WebRequestMethods.Ftp.DownloadFile; // Dosya indirmek için bu request metodu gerekiyor
                request2.Credentials = new NetworkCredential(username, password);
                request2.UsePassive = true;
                request2.UseBinary = true;
                request2.KeepAlive = false;

                FtpWebResponse response = (FtpWebResponse)request2.GetResponse();
                Stream ftpStream = response.GetResponseStream(); 

                return CopyToMemory(ftpStream);
            }
            catch (ArgumentException) { return null; }
            catch (UriFormatException) { return null; }
            catch (WebException) { return null; }

        }

Bu ilk metodumuzdu. Projemizde kullanacağımız metod budur. Diğer metodumuz ise,

        private static MemoryStream CopyToMemory(Stream input)
        {
            MemoryStream ret = new MemoryStream();
            byte[] buffer = new byte[8192];
            int bytesRead;
            while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ret.Write(buffer, 0, bytesRead);
            }
            ret.Position = 0;
            return ret;
        }

Bu işlemi biraz açıklamamız gerekirse;

İlk metodumuz, FTP üzerinden bir dosyaya bağlanıp MemoryStream ile RAM’a atar ve oradan gösterir.

İkinci metodumuz ise, FTP den Stream olarak alınan dosyayı MemoryStream’a dönüştürür

Nasıl kullanacağımıza gelirsek,

Örneğin indirmek istediğimiz dosya bir resim ise şu şekildedir.

Bitmap bmp = (Bitmap)Bitmap.FromStream(FTP_Upload_Download.FTP_Dosya_Getir(resimyol));

Benim FTP işlemlerim FTP_Upload_Download adı bir class dosyası içindedir. FTP_Dosya_Getir ise metodumuzun adıdır.

Peki indirmek istediğimiz dosya bir PDF ise , (Örnekte DevExpress PDF Viewer nesnesi kullanılmıştır.)

MemoryStream stream = FTP_Upload_Download.FTP_Dosya_Getir(path);
pdfViewer1.LoadDocument(stream);

Gördüğünüz gibi, bu şekilde FTP ‘deki bir dosyayı indirmeden gösterimini yapabiliriz. Dosya bir word yada excel de olabilir. Bunları görüntüleyecek bir nesne ile kullanılabiliyor olması gerekir.


C# FTP Server Dosyayı İndirmeden Göstermek, dersimizde bu kadar arkadaşlar. Diğer derslerimizde görüşmek üzere…

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.

Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…

Takipte ve Sağlıcakla kalın. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)