PDA

View Full Version : آپلود فایل به سرور(آموزشی)



Asad.Safari
چهارشنبه 18 شهریور 1383, 17:46 عصر
با سلام

کدهای مربوط به Upload کردن فایل به سرور را باید به دو قسمت تقسیم نمود. قسمت اول شامل کدهایی است که نحوه نمایش در مرورگر را شامل می شوند و اساس آن بر HTML است. و قسمت دوم مربوط به طرف سرور است که شامل کدهایی است که با ASP.NET نوشته می شوند. برنامه زیر حاوی کدهای مربوطه برای انجام این کار به صورات خیلی ساده و ابتدایی می باشد. همانطور که ملاحظه می کنید برخلاف ASP کلاسیک، نیاز به وجود component خاصی نمی باشد و این کار در ASP.NET بصورت خیلی ساده انجام پذیر است.


Upload.aspx:
<HTML>
<HEAD>
<TITLE>Uploading File...</TITLE>
<Script language="vb" runat="server">
sub page_load(s as object,e as EventArgs)
If Not (MyInputFile.PostedFile Is Nothing) Then
MyInputFile.PostedFile.SaveAs("c:\filename.ext")
Response.write("Your File was saved on the server...")
End If
end sub
</script>
</HEAD>
<BODY>
<FORM method="post" encType="multipart/form-data">
<input id="MyInputFile" type="file" name="MyInputFile" runat="server">
<input type="submit" value="Submit">
</FORM>
</BODY>
</HTML>

در زیر به شرح و توضیح برنامه بالا می پردازیم:

کدهای مربوط به طرف Client
به دلیل آنکه در این قسمت، ارسال اطلاعات به سرور را داریم، باید کدهای مربوطه درون یک فرم قرار گیرند. اما لازم است که ویژگی encType آن فرم را به صورت زیر مقدار دهی کنیم، زیرا در غیر اینصورت فایل انتخاب شده توسط کاربر به سرور ارسال نخواهد شد:


encType="multipart/form-data"

در HTML کنترلی وجود دارد که وظیفه دریافت نام فایل و ارسال آن به سرور را عهده دار می باشد:


<input id="MyInputFile" type="file" name="MyInputFile" runat="server">

توجه کنید که این کنترل را به صورت یک سرور کنترل در می آوریم تا بتوانیم در ASP.NET از توانایی های آن استفاده نماییم و به همین دلیل ویژگی runat="server" را به کنترل مربوطه اضافه کرده ایم. بنابراین کد مربوط به قسمت Client به صورت زیر خواهد بود:


<body>
<form method="post" encType="multipart/form-data">
<INPUT id="MyInputFile" type="file" name="MyInputFile" runat="server">
<input type="submit" value="Submit">
</form>
</body>

کدهای مربوط به طرف Server
این قسمت کدهایی را شامل می شود که برای ذخیره کردن فایل بر روی سرویس دهنده مورد استفاده قرار می گیرند.همانطور که گفته شد شئ مربوط به دریافت نام فایل را به صورت سرور کنترل قرار دادیم تا بتوانیم از خصوصیات آن در سرور استفاده کنیم (در اینجا نام آنرا MyInputFile درنظر گرفته ایم). یکی از خصوصیات این شئ، شئ PostedFile می باشد که به فایل ارسالی توسط کاربر اشاره می کند. این شئ نیز شامل متدی است که اقدام به ذخیره فایل می کند. بنابراین قبل از ذخیره کردن باید مطمئن شد که آیا شئ PostedFile به چیزی اشاره می کند و یا اینکه تهی است. برای این منظور کد مربوط به ذخیره سازی را در شرط زیر قرار می دهیم:


If Not (MyInputFile.PostedFile Is Nothing) Then

و درصورت صحیح بودن شرط، اقدام به ذخیره سازی می نماییم. متد SaveAs شئ PostedFile دارای پارامتری است که محل و نام فایلی که قرار است بر روی سرور ذخیره شود را مشخص می کند. در انتها نیز پیغامی مبنی بر اینکه فایل با موقیت ذخیره شده است را به کاربر می دهیم.


Response.write("Your File was saved on the server successfuly...")

بنابراین کد طرف سرور به صورت زیر خواهد بود:


<script language="vb" runat="server">
sub page_load(s as object,e as EventArgs)
If Not (MyInputFile.PostedFile Is Nothing) Then
MyInputFile.PostedFile.SaveAs("c:\filename.ext")
Response.write("Your File was saved on the server...")
End If
end sub
</script>

چند نکته
دیگر خصوصیات شئ PostedFile به صورت زیر است:
• ContentLength: به اندازه فایل ارسالی اشاره میکند.
• ContentType: MIME فایل ارسالی را مشخص می کند که در تشخیص نوع فایل دریافتی کمک می کند.
(بعضی از انواع رایج MIME عبارت اند از : text/plain ، image/gif ، image/jpeg ، audio/mpeg ، application/msword ، application/octed-stream ، video/mpeg ، audio/wav و...)
• FileName: نام فایل و مسیر آن در کامپیوتر شخص کاربر را معین می کند.(مانند C:\images\personal\myface.jpg)
• InputStream: یک شئ stream که به فایل upload شده اشاره می کند و آنرا برای خواندن محتوایش آماده می سازد.

یک نکته مهم
توجه کنید که به طور پیش فرض طول داده های ارسالی در یک request حداکثر 4096 بایت (یا همان 4 kb ) می باشد. بدین معنی که یک فایل ارسالی حداکثر می تواند 4 kb باشد. برای اینکه این مقدار را به مقدار لازم و مورد نیاز افزایش دهید باید در فایل web.config ویا machine.config در قسمت <system.web> در صورتیکه قسمت زیر موجود نیست آنرا اضافه کنید



<httpRuntime maxRequestLength="1000000"/>


ودر صورت وجود مقدار maxRequestLength را به مقدار دلخواه تنظیم کنید. این مقدار بر حسب بایت می باشد. در مثال بالا مقدار ماکزیمم فایل ارسال یک میلیون بایت (حدود 1 MGB) می باشد. به عنوان نمونه یک فایل web.config که فقط نیاز فوق را برآورده سازد به صورت زیر خواهد بود:


Configuration file : web.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration >
<system.web>
<httpRuntime maxRequestLength="1000000" />
</system.web>
</configuration

Vahid_Nasiri
چهارشنبه 18 شهریور 1383, 18:19 عصر
گل پسر ماخذ یادت نره.

binyaz2003
جمعه 06 آذر 1383, 21:32 عصر
با سلام
من این کد رو کپی کردم و اجرا کردم اما وقتی submit می کنم میگه که صفحه مقصد رو نمی تونه پیدا کنه؟
من رو iis امتحان می کنم آیا برنامه خاصی می خواد که نصب کنم؟

Vahid_Nasiri
شنبه 07 آذر 1383, 10:34 صبح
باید روی سیستم شما دات نت فریم ورک نصب باشد. + مسیرهایی که در آن مقاله ذکر شده باید وجود خارجی داشته باشند.

Erfanian
یک شنبه 08 آذر 1383, 09:50 صبح
با سلام
لطفا در مورد کد Download کردن نیز توضیح دهید :wink: