ASP.NET دارای دو کنترل است که به کاربران اجازه می دهد فایل ها را در وب سرور آپلود کنند. هنگامی که سرور داده های فایل ارسال شده را دریافت کرد، برنامه می تواند آن را ذخیره کند، بررسی کند یا نادیده بگیرد. کنترلهای زیر اجازه آپلود فایل را میدهند:
HtmlInputFile - یک کنترل سرور HTML
FileUpload - و کنترل وب ASP.NET
هر دو کنترل اجازه آپلود فایل را می دهند، اما کنترل FileUpload به طور خودکار کدگذاری فرم را تنظیم می کند، در حالی که HtmlInputFile این کار را انجام نمی دهد.
در این آموزش از کنترل FileUpload استفاده می کنیم. کنترل FileUpload به کاربر این امکان را می دهد که فایل مورد نظر را جستجو و انتخاب کند و یک دکمه مرور و یک جعبه متن برای وارد کردن نام فایل ارائه می دهد.
هنگامی که کاربر با تایپ نام یا مرور نام فایل را در کادر متن وارد کرد، میتوان از روش SaveAs کنترل FileUpload برای ذخیره فایل در دیسک فراخوانی کرد.
سینتکس اصلی FileUpload به این صورت است:
<asp:FileUpload ID= "Uploader" runat = "server" />
کلاس FileUpload از کلاس WebControl مشتق شده است و تمام اعضای آن را به ارث می برد. جدای از آن ها، کلاس FileUpload دارای ویژگی های فقط خواندنی زیر است:
توضیحات خواص
FileBytes آرایه ای از بایت های موجود در فایلی که باید آپلود شود را برمی گرداند.
FileContent شی جریان را که به فایلی که قرار است آپلود شود اشاره می کند، برمی گرداند.
FileName نام فایلی که باید آپلود شود را برمی گرداند.
HasFile مشخص می کند که آیا کنترل فایلی برای آپلود دارد یا خیر.
PostedFile یک مرجع به فایل آپلود شده برمی گرداند.
فایل ارسال شده در یک شی از نوع HttpPostedFile محصور شده است که می توان از طریق ویژگی PostedFile کلاس FileUpload به آن دسترسی داشت.
کلاس HttpPostedFile دارای ویژگی های پرکاربرد زیر است:
توضیحات خواص
ContentLength اندازه فایل آپلود شده را بر حسب بایت برمی گرداند.
ContentType نوع MIME فایل آپلود شده را برمی گرداند.
FileName نام کامل فایل را برمیگرداند.
InputStream یک شی جریان را که به فایل آپلود شده اشاره می کند، برمی گرداند.
مثال
مثال زیر کنترل FileUpload و ویژگی های آن را نشان می دهد. فرم دارای یک کنترل FileUpload به همراه یک دکمه ذخیره و یک کنترل برچسب برای نمایش نام فایل، نوع فایل و طول فایل است.
در نمای طراحی، فرم به صورت زیر است:
کد فایل محتوا به صورت زیر است:
<body>
<form id="form1" runat="server">
<div>
<h3> File Upload:</h3>
<br />
<asp:FileUpload ID="FileUpload1" runat="server" />
<br /><br />
<asp:Button ID="btnsave" runat="server" ="btnsave_Click" Text="Save" style="width:85px" />
<br /><br />
<asp:Label ID="lblmessage" runat="server" />
</div>
</form>
</body>
کد پشت دکمه ذخیره به صورت زیر است:
protected void btnsave_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
if (FileUpload1.HasFile)
{
try
{
sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName);
//saving the file
FileUpload1.SaveAs("<c:\\SaveDirectory>" + FileUpload1.FileName);
//Showing the file information
sb.AppendFormat("<br/> Save As: {0}", FileUpload1.PostedFile.FileName);
sb.AppendFormat("<br/> File type: {0}", FileUpload1.PostedFile.ContentType);
sb.AppendFormat("<br/> File length: {0}", FileUpload1.PostedFile.ContentLength);
sb.AppendFormat("<br/> File name: {0}", FileUpload1.PostedFile.FileName);
}catch (Exception ex)
{
sb.Append("<br/> Error <br/>");
sb.AppendFormat("Unable to save file <br/> {0}", ex.Message);
}
}
else
{
lblmessage.Text = sb.ToString();
}
}
به موارد زیر توجه کنید:
کلاس StringBuilder از فضای نام System.IO مشتق شده است، بنابراین باید گنجانده شود.
بلوکهای try and catch برای گرفتن خطاها استفاده میشوند و پیام خطا را نمایش میدهند.