Makale Özeti

Bazen projelerimizde birden fazla FileUpload kullanmamız gerekebilir. Basit bir örnek olarak foto galeriyi verebiliriz. Burada fotoğraflarımızı hızlı bir şekilde aktarmak için birden fazla FileUpload işimizi bir hayli kolaylaştıracaktır.

Makale

Bazen projelerimizde birden fazla FileUpload kullanmamız gerekebilir. Basit bir örnek olarak foto galeriyi verebiliriz. Burada fotoğraflarımızı hızlı bir şekilde aktarmak için birden fazla FileUpload işimizi bir hayli kolaylaştıracaktır. Bunun için düşünebileceğimiz en basit yol sayfamıza kaç tane FileUpload koymak istiyorsak tek tek eklemek olacaktır. Fakat bu yol hem uzun hem de düşünsenize her FileUpload nesnesine ayrı ayrı koşul (Dosya var mı?, Varsa uzantıları uygun mu?, Boyutu uygun mu? vb.)  oluşturmamız gerekecek.

 

Tüm bu işlemleri düşündüğümüzde işlemlerimiz ve kodlarımız daha da uzuyor. Bunu daha düzenli ve tüm kontrollerini tek bir yerden yapmak için code behind kısmında istediğimiz kadar FileUpload oluşturabiliriz. Aslında bizim kod tarafında istediğimiz kadar FileUpload üretme işlemini bize Tool olarak sunan geliştirici firmalar var. Bunu da ek olarak belirteyim. Bunları satın alarak da çözüm sağlayabilirsiniz.

 

Şimdi işlemlerimize başlayalım. Öncelikle türeteceğimiz FileUpload nesnelerini düzenli bir şekilde ekranda tutmak için elemanlarımızı Panele eklememiz gerekmektedir. Source kısmına aşağıdaki şekilde bir panel ekliyoruz.

<asp:Panel ID="pnlYuklemePaneli" runat="server">           
            <h3>File Upload Oluşturuldu</h3>           
</asp:Panel>

 

Daha sonra türeteceğimiz FileUploadlardan seçilen dosyaları yüklemek için bir button ekleyelim. Burada onClick olarak atadığımız eventi code behind de kullanacağız.

<asp:ButtonID="btnYukle"OnClick="btnYukle_Click"runat="server"Text="Yükle"/>

 

Buraya kadar source kısmında yapmamız gerekenleri gerçekleştirdik. Şimdi seçtiğimiz dosyaları yüklemek için bir images klasörü oluşturalım. Ve daha sonrasında code behind kısmına geçelim.

 

Dinamik kontrol ekleme yazımda belirtiğim gibi Asp.Net projelerinde Page Life Cycle(Sayfa yaşam döngüsü) vardır. Her olayın bir gerçekleşme sırası mevcuttur. Bu yüzden ViewState yüklenmeden bizim kontrollerimizi eklememiz mantıklı olacaktır.  ViewState oluşmadan işlemimizi en doğru şekilde gerçekleştirebileceğimiz yer OnInit eventıdır. O yüzden işlemlerimizi orada gerçekleştirdim. 

//Bu değişken fileupload nesnesinden ne kadar oluşturacağımızı tutmaktadır.
int kacAdet=5;
protected override void OnInit(EventArgs e)
    {
        //Dizi olarak FileUpload nesnesini tanımlıyoruz.
        FileUpload[] fuUpload=newFileUpload[kacAdet];
  
        //Kaç adet FileUpload oluşturacaksak o kadar ekrana oluşturmasını sağlıyoruz.
        for (inti=0; i<kacAdet; i++)
        {
            //Nesneye FileUpload özelliğini atıyoruz.
            fuUpload[i] =newFileUpload();
            //Nesnenin id sini veriyorum.
            fuUpload[i].ID="fuUpload"+i.ToString();
            //Ben panele eklemeyi tercih ettim siz istediğiniz ilgili bir nesneye ekleyebilirsiniz
            pnlYuklemePaneli.Controls.Add(fuUpload[i]);
  
            //Bu 3 satırlık kodu yapmamızın sebebi her FileUpload nesnesinden sonra alt satıra geçirmeyi sağlamaktadır.
            Literal lblAltSatir=newLiteral();
            lblAltSatir.Text="<br/>";
            pnlYuklemePaneli.Controls.Add(lblAltSatir);
        }
        base.OnInit(e);
    }

 

Yukarıdaki her satıra açıklama eklemeye çalıştım.  Fakat kısaca maddelerle özetlemek gerekirse şu şekilde bir sıralama yapabiliriz.

  •  kacAdet değişkenimize bağlı olarak Panelimize FileUpload nesnelerimizi döngü içerisinde ekliyor.
  •  Her döngü sonunda bir Literal nesnesi de türetip alt satıra geçmeyi sağlıyorum. Eğer bunu yapmazsak nesnelerimiz yan yana oluşacaktır.
       
        Ve son olarak eklenen dosyalarımızı yüklemek için oluşturduğumuz buttonun click eventını ekleyelim.
protected void btnYukle_Click(objectsender, EventArgs e)
    {
        //Toplam oluşturduğumuz FileUpload nesnemiz kadar döngü oluşturuyoruz. çünkü oluşturduğumuz tüm FileUpload nesnelerine erişmemiz gerekiyor.
        for(inti=0; i<kacAdet; i++)
        {
            /*Burada FileUploadları panele eklediğimiz için nesnemizi panelde bulup üzerinde işlem yapmak üzere tekrar tanımlıyoruz.
             * Dikkat etmemiz gereken nokta Page_Load eventinde tanımladığımız ID ile burada tanımladığımız ID nin aynı olması gerekmektedir.
             * Biz aynı olmasını sağlamak için string olarak fuUpload ve yanına her döngünün i değerini ekledik :)
             * */
            FileUpload fuUpload= ((FileUpload)pnlYuklemePaneli.FindControl("fuUpload"+i.ToString()));
  
            //Daha sonra tanımladığımız nesnenin boş olup olmadığını kontrol ediyoruz
            if(fuUpload.HasFile)
            {
                /* Burada kaydetme işlemini yapıyoruz.
                 * images klasörüne FileUpload da seçilen dosyanın ismiyle doğrudan kaydediyoruz
                 * */
                fuUpload.SaveAs(Server.MapPath("images/"+fuUpload.FileName));
  
                /*Tabi yükleneceklere herhangi bir kısıtlama koymadık. Boyut, uzantı, isim vb. kısıtlamaları siz projenize göre ayarlayabilirsiniz.
                 * Koydunuz koşullar çerçevesinde FileUploadlar ile dosyalarınız seçtikten sonra Yükle buttonuna basmanız durumunda klasöre dosyaları yüklediğini görebilirsiniz.
                 * */
            }
        }
    }

 

Bu işlemleri de gerçekleştirdikten sonra örneğimizi tamamlamış olduk. İşlemleri adım adım takip ettikten sonra aşağıdaki gibi bir ekranla karşılaşacaksınız.