سلام دوستان عزیز ، امیدوارم که خوب باشید. همانطورکه میدانید بحث امروزما درباره پلت فرم Asp است.برای بارگذاری فایل در سرویس دهنده ASP.NET دو کنترل ویژه ی بارگذاری (آپلود) فایل در سرویس دهنده (server) ارائه می دهد. مجرد اینکه سرور داده های فایل ارسال (post) شده را دریافت می کند، اپلیکیشن مورد نظر می تواند آن را ذخیره کرده، بررسی کند و یا آن را کاملا نادیده بگیرد. دو کنترل زیر امکان بارگذاری فایل را در سرور فراهم می کند.
HtmlInputFile – یک کنترل سرور HTML
FileUpload – یکی از کنترل های وب که متعلق به خود ASP.NET می باشد
هر دو کنترل نام برده قابلیت بار گذاری فایل در سرور را دارند، با این تفاوت که FileUpload به صورت خودکار رمزگذاری (encoding) فرم را تنظیم (set) می کند در حالی که کنترل HtmlInputFile چنین کاری را انجام نمی دهد.
در این فصل از سری مقاله های آموزشی ASP.NET تنها به شرح FileUpload می پردازیم. کنترل ذکر شده به کاربر اجازه می دهد فایلی که قرار است آپلود شود را جستجو (مرور) کرده و انتخاب کند. این کار را با ارئه ی یک دکمه ی پیمایش (browse button) و کادر متن (text box) برای وارد کردن اسم فایل مورد نظر انجام می دهد.
پس از اینکه کاربر اسم فایل را در کادر متن وارد کرد، متد SaveAs کنترل نام برده فراخوانده شده و فایل مورد نظر داخل دیسک ذخیره می شود.
دستور نگارش (syntax) کنترل FileUpload به صورت زیر می باشد.
<asp:FileUpload ID=”Uploader” runat=”server” />
کلاس FileUpload از کلاس WebControl مشتق شده و از این رو تمامی اعضای آن را به ارث می برد. علاوه بر اعضای به ارث گرفته شده کلاس FileUpload دارای خواص read-only(خاصیت یا property هایی که تنها دارای getter هستند read-only اطلاق می گردند) زیر می باشد.
خاصیت
شرح
FileBytes
خاصیت FileBytes آرایه ای از بایت های موجود در یک فایل که قرار است در سرور بارگذاری (upload) شود را برمی گرداند.
FileContent
این خاصیت یک شی Stream باز می گرداند که به فایلی که قرار است با استفاده از کنترل FileUpload در سرور بارگذاری شود اشاره می کند.
FileName
اسم فایلی که قرار است آپلود شود را برمی گرداند.
HasFile
این خاصیت مشخص می کند آیا کنترل مورد نظر فایلی برای ارسال و بارگذاری در سرور دارد یا خیر.
PostedFile
ارجاعی (reference) به فایل آپلود شده بازمی گرداند.
فایل ارسال (post) شده در شی از نوع HttpPostedFile کپسوله سازی می شود. می توان به وسیله ی خاصیت PostedFile کلاس FileUpload به فایل ارسال شده دسترسی پیدا کرد.
کلاس HttpPostedFile دارای خواص بسیار پرکاربرد زیر است.
خاصیت
شرح
ContentLength
اندازه یا حجم فایل بارگذاری شده در سرویس دهنده را بر حسب واحد بایت برمی گرداند.
ContentType
نوع (type) MIME فایل آپلود شده در سرور را برمی گرداند.
FileName
این خاصیت اسم کامل فایل بار گذاری شده در سرور را بازمی گرداند.
InputStream
یک شی stream که به فایل آپلود شده اشاره می کند بازمی گرداند.
مثال
مثال زیر کنترل FileUpload و خاصیت های آن را نمایش می دهد.
فرم مورد نظر دارای یک کنترل FileUpload، دکمه ی ذخیره سازی (save button) و یک کنترل label ویژه ی نمایش اسم فایل، نوع و طول آن می باشد.
کد Content file به ترتیب زیر می باشد.
<%@ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”File_Uploading.aspx.cs” Inherits=”Asp_Net_File_Uploading.File_Uploading” %>
<!DOCTYPE html>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title>File_Uploading</title>
</head>
<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” OnClick=”btnsave_Click” Text=”Save” Style=”width: 85px” />
<br />
<br />
<asp:Label ID=”lblmessage” runat=”server” />
</div>
</form>
</body>
</html>
Code behind دکمه ذخیره سازی (save button) نیز به شرح زیر می باشد.
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(Server.MapPath(Request.ApplicationPath) +”/Files/” + 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 از فضای نام (namespace) System.IO مشتق شده و از این رو حتما باید لحاظ شود.
بلوک های catch و try به منظور ضبط و نمایش پیام های خطا بکار می روند.