ارسال (Upload) فایل به سرور در ASP.NET
چهارشنبه 24 خرداد 1391 6:30 PM
ارسال (Upload) فایل به سرور در ASP.NET
در بسیاری از Web Applicationها نیاز به ایجاد امکان Upload فایل به سرور به صورت کنترل شده و بدون نیاز به برقراری دسترسی از طریق FTP و… می باشد. انجام این کار در ASP.NET بسیار ساده است. در این مقاله سعی شده است از دیدگاه کاربردی و نه آزمایشگاهی به این مطلب نگریسته شود. به طوری که کلیه مراحل جهت ذخیره فایل روی Remote Server می باشد و نه Localhost.
کدنویسی شامل دو قسمت می باشد:
کدهای مربوط به Presentation Layer و یا همان صفحات aspx. که مورد مشاهده کاربر قرار می گیرد.
کدهای مربوط به Business Login Layer که همان Code Behind و Handlerهای صفحه می باشند که در این مقاله به زبان VB.NET نوشته شده است.
برای این کار ابتدا بایستی یک وب فرم درون Application خود ایجاد کرده سپس در درون تگ <form> تگ زیر را اضافه کنید:
<input id=”filename” type=”file” runat=”server”>
ویژگی type=”file” نشاندهنده این است که ما با یک فیلد معمولی متنی سر و کار نداریم.
دو نکته مهمی که باید در اینجا مدنظر قرار گیرند عبارتند از:
فراموش نکنید که ویژگیهای runat=”server” و enctype=”multipart/form-data” حتما در تگ <form> تنظیم شوند.
تگ <input> شما نیز باید خاصیت runat=”server” را داشته باشد تا بتوانیم از طریق ASP.NET آن را کنترل کنیم.
قرار دادن تگ <input> در صفحه شما یک فیلد متنی و یک دکمه …Browse برای شما ایجاد می کند که با کلیک کردن روی آن پنجره ای جهت انتخاب فایل از روی سخت دیسک شما باز می شود و پس از انتخاب فایل و تایید مقدار Value فیلد متنی با مسیر فایل روی سخت دیسک شما جایگزین می شود.
حال بایستی فایل انتخاب شده به سرور منتقل شود برای اینکار یک کنترل Button به صفحه اضافه می کنیم که با کلیک کردن روی آن فایل به سرور منتقل شود:
<asp:Button id=”UploadButton” runat=”server” Text=”Upload” />
در حال حاضر صفحه Presentation آماده است و بایستی در Code Behind صفحه و یا Block Script رویداد کلیک روی دکمه Upload را کنترل نماییم. (ما در اینجا از Code Behind استفاده کرده ایم و تنها قسمت مربوط به Event Handling ذکر شده اما در فایل ضمیمه مقاله کل Code Behind را می توانید بیابید)
Private Sub UploadButton_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles UploadButton.Click
If Not (filename.PostedFile.FileName.Length = 0) Then
Dim ServerPath As String = "C:\YourWebSite\YourFolder" &
Mid(filename.PostedFile.FileName, InStrRev(filename.PostedFile.FileName, "\",
-1, 1), filename.PostedFile.FileName.Length)
filename.PostedFile.SaveAs(ServerPath)
filename.Visible = False
UploadButton.Visible = False
lblError.Visible = False
lblSendMessage.Visible = True
lblSendMessage.Text = "فایل شما به سرور منتقل شد.";
Else
lblError.Visible = True
End If
End Subکد بالا پیچیدگی چندانی ندارد اما جهت رفع هرگونه ابهام برخی قسمتهای آن را توضیح می دهیم: در حلقه شرطی ابتدا خاصیبت PostedFile که به فایل مورد انتقال اشاره می کند مورد بررسی قرار می گیرد و چنانچه طول نام فایل برابر صفر نباشد (یعنی فایلی انتخاب شده باشد) آنگاه با استفاده از متد SaveAs فایل را روی سرور ذخیره می کند. نکته ای که این جا مطرح است این است که با استفاده از توابع Mid و InStrRev تنها قسمت انتهایی مسیر فایل روی سخت دیسک شما (یعنی \filename.ext) دریافت شده و به انتهای مسیر فیزیکی Server شما می چسبد تا فایل مزبور با همان نام روی Server ذخیره شود. شما می توانید مسیر فیزیکی سرور خود را با ساختن یک فایل ساده مثل ShowPath.aspx و قرار دادن دستور زیر پیدا کنید.
<% Response.Write(Server.MapPath(“ShowPath.aspx”)) %>
چنانچه شما فایلهای ضمیمه این مقاله را بررسی کنید خواهید دید که چندین Label Control جهت اطلاع رسانی به کاربر جهت انتخاب فایل پیش از کلیک بر روی دکمه Upload و نیز پس از ارسال فایل قرار داده شده است. ویژگی Visible که در این قسمتها مورد استفاده قرار گرفته است باعث می شود تا پیغام فوق تنها در زمان مقتضی نمایش و حتی فرمها نیز پس از ارسال محو شوند.
نکته دیگری که بایستی حتما مد نظر قرار دهید این است که مقدار maxRequestLength را که در واقع حجم فایل ارسالی را محدود می کند تنظیم کنید. برای این کار در فایل web.config خود و در قسمت <system.web> تگ زیر را اضافه کنید:
<httpRuntime maxRequestLength=”50000″ />
عدد فوق بر حسب بایت می باشد و در این مثال حجم فایل ارسالی حداکثر ۵۰ کیلوبایت در نظر گرفته شده است. چنانچه شما می خواهید در این زمینه نیز محدودیتی را برای کاربران خود اعمال کنید بایستی در یک حلقه شرطی ویژگی filename.PostedFile.ContentLength را نیز کنترل کنید.
کریمی که جهان پاینده دارد تواند حجتی را زنده دارد
دانلود پروژه و کارآموزی و کارافرینی