|
آپلود فايل بر روي سرور با استفاده از ASP.NET
آپلود فايل بر روي سرور از طريق کلاينت، يکي از اعمالي
است که برنامه نويسان ASP.NET گاها با آن مواجه مي شوند.
بدين منظور، از 2 کلاس در ASP.NET استفاده مي شود.
1) System.Web.UI.HtmlControls.HtmlInputFile
System.Web.HttpPostedFile (2
اولين کلاس نمايانگر يک کنترل HtmlInputFile است که شامل يک TextBox به همراه يک
دکمه ي Browse به منظور انتخاب فايل آپلود شونده توسط کاربر مي باشد.
دومين کلاس، نمايانگر فايلي است که توسط کاربر انتخاب شده.
اين کلاس از اولين کلاس (HttpInputFile) نمونه سازي يا ايجاد مي شود.
کلاس HtmlInputFile:
اين کلاس داراي 4 خاصيت بوده که به ترتيب در زير شرح داده شده است:
Accept: ليستي از انواع فايل هايي که کاربر قادر به آپلود آنها بر روي سرور است.
MaxLength: حداکثر تعداد کاراکترهاي مجاز مسير انتخاب فايل.
PostedFile: اين خاصيت، يک شي از نوع System.Web.HttpPostedFile بر مي گرداند که
نمايانگر فايل انتخاب شده توسط کاربر جهت آپلود است.
Width: اين خاصيت نمايانگر طول Text Box اي است که به وسيله HtmlInputFile نمايش
داده مي شود.
به منظور استفاده از کنترل HtmlInputFile و آپلود فايل، مقدار خاصيت enctype فرم
بايد برابر با multipart/form-data قرار گيرد.
مثال:
|
<form enctype="multipart/form-data" runat="server">
Select File to Upload:
<input id="uploadedFile" type="file" runat="server">
<input type=button id="upload"
value="Upload"
OnServerClick="Upload_Click"
runat="server">
</form>
|
کلاس HttpPostedFile:
اين کلاس نمايانگر فايلي است که توسط کاربر جهت آپلود بر روي سرور انتخاب شده.
اين کلاس داراي يک متد به نام SaveAs مي باشد که فايل انتخاب شده را بر روي سرور
ذخيره مي کند. (در اين مقاله از روش ديگري بدين منظور استفاده شده است)
اين کلاس داراي 4 خاصيت بوده که به ترتيب در زير شرح داده شده است:
ContentLength: حجم فايل آپلود شده بر حسب بايت.
ContentType: نوع فايل آپلود شده: مثلا: "image/gif"
FileName: مسير فايل انتخاب شده توسط کاربر.
نکته مهم: تنها مرورگرهايي که بر روي ويندوز اجرا مي شوند، مقدار اين خاصيت را بر
مي گردانند.
InputStream: يکي شي از نوع System.IO.Stream که به فايل آپلود شده اشاره کرده و
اجازه کار با فايل را فراهم مي کند.
نکته مهم: خاصيت PostedFile کنترل HtmlInputFile، به فايلي که بر روي سرور آپلود
شده اشاره مي کند. پس در صورتي که عمل آپلود با موفقيت انجام نشده باشد، اين خاصيت
مقدار null را بر مي گرداند.
به شکل زير به سادگي مي توان از انجام موفقيت آميز عمل آپلود اطمينان حاصل کرد.
|
If ( HtmlInputFile1.PostedFile != null )
{
// Done
}
else
{
// Fail
}
|
پس از انتخاب فايل توسط کاربر، بايد يک اشاره گر به فايل انتخاب شده ايجاد گردد:
|
HttpPostedFile myFile = HtmlInputFile1.PostedFile;
|
از آنجايي که قصد ذخيره محتويات فايل در يک آرايه (بافر) را داريم، بايد اندازه
آرايه را برابر با اندازه فايل تعيين کنيم:
int nFileLen = myFile.ContentLength;
byte[] myData = new byte[nFileLen];
|
حال نوبت ريختن محتويات فايل در آرايه با استفاده از متد Read خاصيت InputStream
مرجع شي HttpPostedFile است.
|
myFile.InputStream.Read(myData, 0, nFileLen);
|
تنها کار باقي مانده، ذخيره محتويات آرايه بر روي سرور است.
تابع زير اين کار را به راحتي با دريافت مسيري که قرار است فايل بر روي آن ذخيره
شود و نام آرايه انجام ميدهد:
|
private void SaveFile(string strPath, ref byte[] Buffer)
{
FileStream myFile = new FileStream(strPath, FileMode.Create);
myFile.Write(Buffer, 0, Buffer.Length);
myFile.Close();
}
|
نکته مهم: به منظور آپلود فايل بر روي سرور، اجازه دسترسي Write Permission به پوشه
اي که قرار است فايل در آن ذخيره شود، الزامي است.
نویسنده:
Behrouz_Rad
منبع:
www.barnamenevis.org
|