ASP.NET ile Dosya yükleme, listeleme ve silme işlemleri

Merhaba arkadaşlar, başlıktan da anlaşıldığı gibi asp.net ile dosya yükleme (file upload), yüklediğimiz dosyaları listeleme (file list) ve listelediğimiz dosyalardan seçileni fiziksel olarak silme işlemini göstermeye çalışacağım. Öncelikle şunu belirtmek istiyorum, bu örneğimizde veritabanı bulunmuyor, yani işlemlerimizi direk klasör içindeki dosyalar ile yapacağız.

Öncelikle yeni açtığımız projemizin içine dosyalar adında bir klasör açıp, bu klasöre yazma izni veriyoruz. İlk önce default.aspxsayfamızın kodlarına bakalım.

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label runat="server" ID="mesaj"></asp:Label>
<asp:Label runat="server" ID="lblyd"></asp:Label>
<asp:DropDownList runat="server" ID="ddl"></asp:DropDownList>
<asp:LinkButton runat="server" ID="btnsil" Text="Seçilen dosyayı sil !" onclick="btnsil_Click"></asp:LinkButton>

Şimdide default.aspx.cs kodlarımıza bakalım

using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
yuklenenDosyalar();
}
}
protected void yuklenenDosyalar() {
DirectoryInfo klasor = new DirectoryInfo(MapPath("dosyalar"));
ddl.DataSource = klasor.GetFiles();
ddl.DataBind();
lblyd.Text = ddl.Items.Count + " adet yüklenmiş dosya ! ";
if (ddl.Items.Count == 0)
{
ddl.Items.Add("Yüklenmiş dosya bulunmuyor.!");
ddl.Enabled = false;
btnsil.Visible = false;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
try
{
FileUpload1.SaveAs(Server.MapPath(@"dosyalar\" + FileUpload1.FileName));
string uzanti = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
mesaj.Text = "Dosya başarıyla yüklendi !
";
mesaj.Text += "Dosya adı: " + FileUpload1.FileName + "
";
mesaj.Text += "Dosya türü: " + FileUpload1.PostedFile.ContentType + "
";
mesaj.Text += "Dosya boyutu: " + FileUpload1.PostedFile.ContentLength + "byte
";
mesaj.Text += "Dosya uzantısı: " + uzanti + "
";
ddl.Enabled = true;
yuklenenDosyalar();
}
catch (Exception)
{
mesaj.Text = "Bir hata oluştu ve dosya yüklenemedi ! Muhtemelen ilgili klasörün yazma izni bulunmuyor.";
}
}
else
{
mesaj.Text = "Lütfen dosya seçiniz !";
}
}
protected void btnsil_Click(object sender, EventArgs e)
{
File.Delete(MapPath("dosyalar/"+ddl.SelectedValue));
mesaj.Text = ddl.SelectedValue + " Dosyası başarıyla silindi !";
yuklenenDosyalar();
}
}

Görüldüğü üzere dosyaları yüklemek, listelemek ve silmek gerçekten çok basit. Burada en genel şekliyle örnek vermeye çalıştım, eğer istersek basit bir if bloğuyla sadece jpeg uzantılı dosyalar veya boyutu 10kb den küçük dosyalar yüklenebilir gibi filtrelerde koyabiliriz. Herkese iyi çalışmalar.

  • yok

    süpersin saol

  • http://Websitesi doğukan

    kardeş burda anlattığın gibi yaptım ama çalışmıyor….

    • apoStyLEE

      Aldığınız hatayı derseniz daha iyi yardımcı olabilirim.

  • http://Websitesi veysel

    selam. hocam aynen sizin anlattığınız gibi yaptım. upload ta sorun yok ancak dosyayı silmeye kalktığımda yazma izni olmadığı için silinemiyor. bu sorunu nasıl hallederim. yardımcı olursanız sevinirim.

    • apoStyLEE

      Merhaba, eğer yazma izniyle ilgili bir problem varsa upload işleminde de hata almanız gerekirdi, başka bir problem olmalı, dosya o anda kullanımda olabilir mesela..

  • http://tugberkugurlu.com/ Tugberk

    uploaded olan dosyayı dispose() yaparsanız yükleme sonrasında sorun ortadan kalkacaktır :)

  • http://Websitesi veysel

    sorunu hallettim. file.delete komutu dosyanın içinde bulunduğu klasör açılmadan hata verebiliyor. klasör erişim izinleriyle ilgili. windows 7 de sizde pek çok kez karşılaşmıssınızdır. klasöre çift tıkladıktan sonra ayrı bir pencere açılıyor ve devam tusuna bastıktan sonra klasör açılıyor. ya bir komutla klasörü açar öyle file.delete dersiniz ki ben ilk önce if(file.exist) sonra file.delete yaptım. demekki file.exist komutu klasörü açıp dosyayı denetliyor dosya varmı yokmu diye. daha sonra gelen file.delete komutu da klasör açık olduğu için silme işlemini klasör erişim engeline takılmadan yapabiliyor.

  • http://Websitesi enes

    Merhaba hocam ;
    Iss deki programımdan. baska bir serverda ki klasörleri listelemem gerekiyor fakat bir türlü halledemedim. yardımcı olabilirmisiniz.

    şöyle bir yol :

    http://IP adresi/FlyingChef/FlyingChef_Room/7 Pictures/FC Group Pictures/1 st Group

  • http://Websitesi enes

    hocam ftp ilgisi varmı tam anlayamadım.
    şimdi elimde 2 tane server var. 1 inde ıss kurulu digerinde
    bilgiler tutuluyor.

    ıss bi sanal dosya oluşturdum :
    http://domain/programs/FCPortal/FCPortal_Files/7%20Pictures/FC%20Group%20Pictures/1%20st%20Group/

    bunu explorera yazdıgımda dosyaları görüyorum.

    ama programa yazdıgımda dosyaları göremiyorum

  • codname

    eline sağlık kodları güzel olmuş fakat nerden ne tür kontorl koyduğunu ve nerde ne yaptığını biraz detaylı anlatsan çok iyi olurdu kodu kopyalayıp yapştırmışsın bence yapmış olduğun emek biraz kopyala yapıştır ile puan kaybetmiş tşk

  • Burak

    hocam peki yüklenilen resim klasörde varmı yokmu varsa resimi yüklemeden geçse nasıl olur ?

  • Murat

    takıldığım biyer var ben veri tabanından sildiriyorum yanlız dosyadan resmi nasıl sildiricem yardımcı olurmusunuz kodu yazıyorum
    public void sil()
    {
    SqlDataAdapter komut = new SqlDataAdapter(“delete from manset where id=”+Request.QueryString[“id”],ConfigurationManager.ConnectionStrings[“baglan”].ConnectionString);
    DataTable dt = new DataTable();
    komut.Fill(dt);
    Response.Redirect(“yonetim.aspx?ad=manset”);

    }

  • levent

    merhaba,
    öncelikle makale için teşekkürler,oldukça kullanışlı. size bir sorum olacak, yardımcı olabilirseniz sevinirim.
    pdf-doc-txt-jpeg vb. uzantılı dosyaları projede bir klasöre (örneğinizde “dosyalar”) ekliyoruz.
    ek olarak yüklenen bu dosyaları bir gridview ile listelemek istiyorum. gridview ile listelemek için veirtabanına bir açıklama eklemek yeterli olurmu,olursa nasıl? yoksa dosyalar klasörü içeriği gridview ile listelenebilir mi?

  • haydar

    merhablar fileupload olmadan bir buton atıp örnegin c sürücüsünde bulunan C:\hayx.jpeg bir resmi nasıl kaydedebilirim fileuploadla yapabiliyorum ama direk yol gösterip resmi kaydetmeyi başaramadım yardımcı olursanız sevinirim şimdiden teşekkür ederim.

  • haydar

    bu arada Response.Write(Path.GetFullPath(FileUpload1.FileName)); ile seçtiğim resmin tam yolunu almak istediğimde yol olarak
    C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\Penguins.jpg

    bunu getiriyor çalıştırdığımda da resme gitmiyor fakat benim yolum C:\\Penguins.jpg bu neyden kaynaklı olabilir ?

  • orhan

    Merhaba, klasöre yazma izni nasıl veriliyor. vs 2010’a yazdım ama klasöre yazma izni olmadığı için upload yapmıyor.