Web uygulamalarında, kullanıcıların sunucuya textbox, dropdown gibi kontrollerle bilgi gönderme ihtiyacı web programcılığını doğmasının sebebidir. Fakat bazı durumlarda bu text tabanlı bilgi yetersiz kalır ve sunucuya dosya transfer etmemiz gerektiği durumlar doğar. Mesela kullanıcı profilinin oluşturulduğu bir uygulamada kullanıcı fotoğrafının sunucuya transfer edilip saklanması, veya üyelerinin gönderdiği kaynak kodları yayınlayan bir programlama sitesinde kaynak kodların sunucuya gönderilip saklanmasını örnek olarak verebiliriz. Dosya transferini sağlamak için input HTML tagini kullanırız.
<INPUT type="file" id="fuResim">
HtmlInputFile kontrolümüzü sayfamıza ekledikten sonra runat özelliğine server değerini vererek kontrolümüzü web sunucu kontrolü haline getiririz. Aşağıda public üyelerini kısaca anlattığım basit sınıfı kullanarak sunucuya dosya transfer işlemini kolaylıkla yaparız.
FileUploadHelper Sınıfı Public üyeleri
üye
Açıklama
MaxUploadSize özelliği
Byte olarak, gönderilebilecek en büyük dosya boyutu.
ContentTypes Kolleksiyonu
Gönderilebilecek dosya tipleri
UploadFile Metodu
Gerekli kontroleri (dosya büyüklüğü, dosya içeriği gibi) yapıp, dosyayı sunucuya gönderen metod.
Dosya transfer işlemini yapan yardımcı sınıfımız :
using System.Collections;
namespace FileUpload
{
public class FileUploadHelper
{
if(fileSize > this._maxSize || fileSize == 0) // dosya büyüklüğünü komtrol et
return false;
else if (this.ContentTypes.Count > 0)
{
// Dosya içeriğini kontrol et :
if(this.ContentTypes.Contains(contentType))
return true;
else
return false;
}
else
return true;
}
public int MaxUploadSize
{
set
{
if (value > 0)
_maxSize = value;
else
_maxSize = 0;
}
get { return this._maxSize; }
}
public ArrayList ContentTypes = new ArrayList();
public bool UploadFile()
{
if(this.isFileValid())
{
// Dosyayı verilen yere transfer et : this._htmlInputFileControl.PostedFile.SaveAs(this._uploadPath);
return true;
}
else
{
return false;
}
}
}
}
Dosya transfer sınıfımızı aşağıdaki gibi kullanarak dosya transfer işlemimizi yaparız :
Uygulamada verilen örneğin kaynak kodlarına ulaşmak için tıklayın...
NOT :Dosya transferi örneğini denerken özellikle Windows XP (SP 2) ve Windows 2003 Sarver işletim sistemlerinde "Access denied - Erişim reddedildi" hatası alabilirsiniz.
Web.config dosyanıza <identity impersonate="true" /> eklemeniz ASP.NET prosesinin, sizin kullanıcı haklarınızla çalışamsını sağlayacaktır ve problemi çözecektir.
EKLEME :
Sık kullanılan dosya tipleri için kullanılabilecek ContentType’lar : Zip için : application/x-zip-compressed Rar için : application/octet-stream
Exe için : application/octet-stream Msi için : application/octet-stream
text için : text/plain word için : application/msword excel için : application/vnd.ms-excel