FileUpload ile Yüklenen Dosyaları Binary Olararak Veritabanına Kayıt Etmek
protected void Button1_Click(object sender, EventArgs e)
{
if(FileUpload1.FileContent != null)
{
string dosyaAdi = FileUpload1.FileName; //Dosyanın adı
byte[] dosyaIcerik = FileUpload1.FileBytes; //Dosyanın bilgilerini binary formatta getirir
string dosyaTipi = FileUpload1.PostedFile.ContentType; //Dosyanın MIME Type bilgisini getirir
SqlConnection con = new SqlConnection("data source=localhost; initial catalog=Test; integrated security=true");
SqlCommand cmd = new SqlCommand("Insert Into Dosyalar Values(@dosya_isim, @dosya_icerik, @dosya_tip)", con);
cmd.Parameters.AddWithValue("@dosya_isim", dosyaAdi);
cmd.Parameters.AddWithValue("@dosya_icerik", dosyaIcerik);
cmd.Parameters.AddWithValue("@dosya_tip", dosyaTipi);
con.Open();
if (cmd.ExecuteNonQuery() > 0)
lblMesaj.Text = "Dosya başarıyla yüklendi";
con.Close();
}
}
Bu arada, dosyaya yapılan talep QueryString üzerinden resmin DosyaId kolonundaki değer ile iletilmektedir. Yine talebin daha hızlı cevaplanması için Web Form(.aspx) dosyası yerine Generic Handler(.ashx) dosyası kullanmak daha faydalı olacaktır.
ResimGoruntule.ashx
using System.Data.SqlClient;
public class ResimGoruntule : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string id = context.Request.QueryString["id"];
byte[] dosyaIcerik = null;
string dosyaTipi = String.Empty;
SqlConnection con = new SqlConnection("data source=localhost; initial catalog=Test; integrated security=true");
SqlCommand cmd = new SqlCommand("Select * From Dosyalar Where DosyaId=@id", con);
cmd.Parameters.AddWithValue("@id", id);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
dosyaIcerik = (byte[])dr["DosyaIcerik"];
dosyaTipi = dr["DosyaTip"].ToString();
}
con.Close();
//context.Response.AddHeader("content-disposition", "attachment; filename=" + dosyaAdi + ";"); //Download edilecek dosyanın adı belirleniyor. Bu satırın yorum durumu kaldırılırsa tüm dosyalar download işlemine zorlanacaktır.
context.Response.ContentType = dosyaTipi; //Gönderilen dosyanın tipi belirtiliyor
context.Response.BinaryWrite(dosyaIcerik); //Gönderilen cevabın içeriği dosyanın binary formattaki bilgileri olacaktır
}
public bool IsReusable {
get {
return false;
}
}
}
Kaynak
https://umutluoglu.com/2009/02/fileupload-ile-yuklenen-dosyalari-veritabaninda-saklamak/
Yorumlar
Yorum Gönder