Bu yazıda C# programlama dilini kullanarak, Visual Studio ile oluşturduğumuz “Windows Form Application” türündeki bir proje ile FTP sunucusuna dosya yüklenmesi için gerekli kodları bulabilirsiniz.
Öncelikle sunucuya yüklenecek dosyanın bir resim dosyası olduğunu ve bu dosyanın “OpenFileDialog” aracı ile seçildiğini varsayalım. Bu nedenden ötürü filtre olarak resim dosyalarını tanımlayalım.
OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Image Files|*.jpeg;*.jpg;*.gif;*.png;*.bmp;*.tiff"; openFileDialog.ShowDialog();
Daha sonra bağlanacağımız FTP sunucusunun bilgilerini ayarlayalım. Buradaki “sunucu_ismi”, “kullanici_adi” ve “sifre” bölümlerini kendi sunucumuza göre düzenlememiz gerekmektedir.
FtpWebRequest request = FtpWebRequest)WebRequest.Create("ftp://www.sunucu_ismi.com/images/" + openFileDialog.SafeFileName); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential("kullanici_adi", "sifre");
Dikkat ederseniz bu adımda OpenFileDialog’dan almış olduğum dosyayı sunucuda oluştruyorum. Sunucuda da “images” klasörünün olduğunu varsayıyorum. Aksi halde “images” klasörünü de açmam gerekirdi.
Sonraki adımda ise resim dosyasını aşağıdaki kodlar ile okuyup Image.Save() fonksiyonunu kullanarak okumak için oluşturduğumuz “Stream”e kaydedelim.
MemoryStream memoryStream = new MemoryStream(); Image image = Image.FromFile(openFileDialog.FileName); switch (openFileDialog.SafeFileName.Substring(openFileDialog.SafeFileName.IndexOf('.') + 1).ToLower()) { case "jpeg": case "jpg": image.Save(memoryStream, ImageFormat.Jpeg); break; case "png": image.Save(memoryStream, ImageFormat.Png); break; case "gif": image.Save(memoryStream, ImageFormat.Gif); break; case "bmp": image.Save(memoryStream, ImageFormat.Bmp); break; case "tiff": image.Save(memoryStream, ImageFormat.Tiff); break; default: return; }
Sunucuya aktarım yapılırken aktarılmak istenen dosya byte dizisi (byte[]) olarak aktarılıp, oluşturulan dosyanın içine yazılır. Bütün bilgiler yazıldığında dosya aktarılmış demektir. Bu nedenden ötürü okuduğumuz resmi bir byte dizisine aktarmamız gerekir. Bu işlemi yapan kod aşağıdaki gibidir.
byte[] fileContents = memoryStream.ToArray();
Son olarak dosyaları sunucuya aktarmak için gerekli kodlar aşağıdaki gibidir.
Stream requestStream = request.GetRequestStream(); requestStream.Write(fileContents, 0, fileContents.Length); requestStream.Close(); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); //MessageBox.Show("Upload File Complete, Status: " + response.StatusDescription); response.Close();
Bu satırlar ile birlikte dosya aktarımı için gereken kodları tamamlamış bulunuyoruz. Bu kodların hepsini istersek bir Button’un “Click” event’ine, veya bir PictureBox yerleştirip hem Click event’inde yükleyip, hem de gösterek de kullanabiliriz. PictureBox’da açmış olduğumuz resmi göstermek için aşağıdaki kod yeterlidir.
thePhoto.Image = new Bitmap(openFileDialog.FileName); thePhoto.SizeMode = PictureBoxSizeMode.Zoom; // Resmi PictureBox'a sığdırmak için
Ek olarak dosyanın yükleme durumu ile ilgili mesajı görmek istersek yorum satırı haline getirdiğim kısmı açarak görebiliriz.