Ana Sayfa » Ders Notları ve Örnekler » ASP.NET » Sunucuya Dosya Gönderme - FileUpload Kontrolü

Uyarılar :
  • Bu sayfada yazılanlar yeniden yayınlanamaz.
  • Bu örnek ders sırasındaki anlatımlardan derlenmiştir. Özellikle bir makale şeklinde yazılmamıştır. Bilgilerde eksiklikler bulunabilir.

Örnek :

<%@ Page Language="C#"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

    void Page_Load(Object o, EventArgs e)
    {

    }

    /*
    FileUpload kontrolü, bir dosyayı sunucuya göndermek üzere seçmek için
    bir metin kutusu ve Gözat tuşunu görüntüler. Bu kontrolün SaveAs metodu
    kullanılarak dosya sunucuya kaydedilir. 
    */

    void btnGonder_Click(Object o, EventArgs e)
    {

        /*
        SaveAs metodunun kullanılabilmesi için sunucudaki mutlak adresin bilinmesi
        gerekir. Aşağıdaki Server sınıfının MapPath metodu, verdiğimiz göreceli
        adresin mutlak adresini verir. "GonderilenDosyalar" klasörü bizim gelen
        dosyayı kaydedeceğimiz klasördür ve bu sayfa ile aynı klasörde durmaktadır.
        Bu nedenle sadece bu klasörün adını vererek (göreceli bir adres vererek)
        mutlak adresini (sunucuda hangi sürücünün hangi klasöründe olduğunu) alıyoruz.
        */

        /*
        Sunucudaki bu klasörün yazma izni olması gerekir. Aksi halde kendi
        makinemizde dosyayı kaydedebiliriz ancak sunucuda kaydedemeyiz.
        */

        /*
        Dosyayı sunucuda kaydedebilmek için kayıt yapacağımız klasörün mutlak adresini
        ve bir dosya adı vermemiz gerekir. Dosya adı olarak gelen dosyanın adını
        (fuDosya.FileName özelliği ile aldığımız dosya adını) kullanıyoruz. Yani
        dosyayı aynı isimle kaydediyoruz. İstersek farklı bir isim de kullanabiliriz.
        */

        // Sunucuda dosyanın kaydedileceği klasörün mutlak adresini al.
    
        String KayitKlasoruMutlakYolu = Server.MapPath("GonderilenDosyalar");

        // Gönderilen dosyanın sadece adını al.

        String GelenDosyaninAdi = fuDosya.FileName;

        // Sunucuda oluşturulacak yeni dosyanın yolunu ve adını belirle.

        /*
        (System.IO.Path.Combine metodu verilen dosya yolu ve adreslerini birleştirir.
        Örneğin System.IO.Path.Combine("C:\Deneme", "abc.txt") ifadesi
        C:\Deneme\abc.txt şeklinde bir string döndürür.)
        */

        String YeniDosyaAdiVeYolu =
                            System.IO.Path.Combine(KayitKlasoruMutlakYolu, GelenDosyaninAdi);
        
        lbl1.Text = "Gönderilen dosyanın adı : " +
                   GelenDosyaninAdi;
        lbl2.Text = "Dosyanın kaydedileceği klasörün mutlak adresi : " +
                   KayitKlasoruMutlakYolu;
        lbl3.Text = "Yeni oluşturulacak dosyanın mutlak adresi ve adı : " +
                   YeniDosyaAdiVeYolu;
        
        if (GelenDosyaninAdi != "")
        {
            /*
            Gelen dosyanın uzantısını, dolayısıyla türünü öğrenmek istiyorsanız
            aşağıdaki kodu kullanın...
            Response.Write("Gelen dosyanın uzantısı : " +
                           System.IO.Path.GetExtension(GelenDosyaninAdi));
            */

            /*
            Dosyayı yukarıda belirlenen yol ve dosya adı ile kaydet.
            (Örneğimizde abc.jpg isimli bir dosyanın geldiğini ve sunucudaki dosyayı
            kaydedeceğimiz klasörün mutlak adresinin "C:\site\GonderilenDosyalar"
            olduğunu varsayarsak dosyayı
            "C:\site\GonderilenDosyalar\abc.jpg" adıyla kaydeder.)
            */

            fuDosya.SaveAs(YeniDosyaAdiVeYolu);
            
            /*
            Yukarıdaki işleri kısaca aşağıdaki gibi de yapabilirsiniz.
            fuDosya.SaveAs(
                           System.IO.Path.Combine(
                                                  Server.MapPath("GonderilenDosyalar"),
                                                  fuDosya.FileName
                                                 )
                          );
            */

            /*
            Not: Gönderilen dosyanın istemcinin makinesinden alınıp sunucuya kaydedilmesi
            sunucu ile tarayıcı arasında gerçekleşen bir olaydır. Biz sadece dosyanın nereye
            ve hangi isimle kaydedileceğini yukarıdaki gibi belirleriz. Bundan sonra
            sadece bekleriz. Dosya büyük ise bu bekleme uzun sürebilir. Bekleme sırasında
            sayfa ile herhangi bir işlem yapamayız. Ancak AJAX kontrolleri kullanılarak
            bu işlem arka planda yapılabilir ve aynı zamanda ziyaretçiye bir ilerleme
            çubuğu görüntülenebilir...
            */

        }
        
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Dosya Gönderme</title>
</head>
<body>
    <form id="form1" runat="server">
    
    <asp:Label id="lbl1" runat="server" /><br />
    <asp:Label id="lbl2" runat="server" /><br />
    <asp:Label id="lbl3" runat="server" /><br />

    <!--Aşağıdaki kontrol (asp:FileUpload dosya göndermek için kullanılır ve HTML çıktısında
    dosyayı seçebilmemiz için bir <input type="file"... etiketi görüntüler.-->

    Göndereceğiniz Dosya : <asp:FileUpload ID="fuDosya" runat="server" width="400" />
    
    <!--Aşağıdaki tuşun Click olayında dosyayı sunucuda belirlediğimiz bir klasöre kaydetme
    işini yapıyoruz.-->

    <asp:Button ID="btnGonder" runat="server"
                OnClick="btnGonder_Click" Text="Dosyayı Gönder" />
    
    </form>
</body>
</html>
İletişim : hazirsite@gmail.com