آموزش ASP.Net

آموزش ASP.Net - بارگذاری فایل

ASP.NET دو کنترل ویژۀ بارگذاری (آپلود) فایل در سرویس دهنده (server) ارائه می دهد. مجرد اینکه سرور داده های فایل ارسال (post) شده را دریافت می کند، اپلیکیشن مورد نظر می تواند آن را ذخیره کرده، بررسی کند و یا آن را کاملا نادیده بگیرد. دو کنترل زیر امکان بارگذاری فایل را در سرور فراهم می کند.

  • HtmlInputFile یک کنترل سرور HTML
  • FileUpload یکی از کنترل های وب که متعلق به خود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 ویژه ی نمایش اسم فایل، نوع و طول آن می باشد.

 asp.net fileupload

کد Content file به ترتیب زیر می باشد:

<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>

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("<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 از فضای نام (namespace)  IOمشتق شده و از این رو حتما باید لحاظ شود.
  • بلوک های catch و try به منظور ضبط و نمایش پیام های خطا بکار می روند.
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش ASP.Net

Learn ASP.Net

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

کلیک کنید و سوالات خود را از ما بپرسید
لطفا فرم سوال را پر کنید

سوال شما با موفقیت ثبت شد. برای اینکه بتوانیم به شما اطلاع رسانی کنیم، موارد زیر را وارد کنید:

لطفا چند لحظه منتظر بمانید ...