upload کردن فايل به سرور در ASP.NET
دوشنبه 13 آذر 1391 8:46 AM
کدهای مربوط به 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>
مدیر تالار های: