آموزش Asp.Net MVC آپلود فایل در سرور

تهران آی تی / برنامــه نویــسـی / آموزش Asp.Net MVC آپلود فایل در سرور

آموزش Asp.Net MVC آپلود فایل در سرور

آموزش Asp.Net MVC آپلود فایل در سرور – یکی از وظایف مهم و اساسی هرسایتی قابلیت آپلود فایل است، حال چه از طرف مدیر سایت و چه از طرف کاربر. فرایند بارگزاری فایلها از سیستم کاربر به داخل فضای اپلیکیشن وب را آپلود فایل در سرور میگویند.

گام اول : ساخت فرم و ارسال فایل

در قدم اول یک کنترلر میسازیم و به آن یک ویو اضافه میکنیم در ویو کنترلر خود فرم ارسال فایل را میسازیم. به نکات زیر در ساخت فرم توجه کنید

  • اتربیوت action : در این اتربیوت مسیر مقصد را مشخص میکنیم.
  • اتربیوت method : برای ارسال فایل حتما باید method ارسال ما Post باشد.
  • اتربیوت enctype : برای ارسال فایل حتما باید enctype ارسال ما multipart/form-data باشد.

<form action="/Home/ShowData" method="post" enctype="multipart/form-data">
<input type="file" name="MyFile" />
<input type="submit" value="Upload File" />
</form>

گام دوم : دریافت فایل

فرم بالا توسط اتربیوت اکشن، داده های ما را به کنترلر Home و اکشن ShowData ارسال میکند. و در اکشن ShowData  فایل ارسالی را دریافت میکنیم.

  • توجه داشته باشید که جنس متغییری که میخواهیم فایل را با آن دریافت کنیم حتما باید از جنس HttpPostedFileBase باشد.

public ActionResult ShowData(HttpPostedFileBase MyFile)
{}

گام سوم : ایجاد ساختار try-catch

کدهای مربوط به آپلود فایل ممکن است در طول اجرای برنامه تولید خطا کند در اینصورت بهتر است از ساختار try catch استفاده شود. بدین صورت که کدهای مربوط به آپلود فایل را داخل بلوک try قرار می‌دهیم. و کدهایی که وقتی برنامه با خطا مواجه میشود را در بلوک catch قرار می‌دهیم.

try
{
//کد های آپلود فایل
}
catch (Exception ex)
{
ViewBag.Message = "ERROR:" + ex.Message.ToString();
return View();
}

گام چهارم : آیا فایلی ارسال شده ؟

در این گام برسی میکنیم که آیا اصلا فایلی برای آپلود کردن، ارسال شده یا خیر. این کار را توسط شرط زیر برسی میکنیم.

if (MyFile != null && MyFile.ContentLength > 0)
{
//کد های آپلود فایل
}
else
{
ViewBag.Message = "شما فایلی را برای آپلود مشخص نکرده اید.";
return View();
}

گام پنجم : تعریف متغییر ها

  • متغییر FileMaxContentLength : توسط این متغییر که از جنس int میباشد، مشخص میکنیم حداکتر حجم مجاز به آپلود چقدر باشد. اگر عدد ۲ را وارد کنیم یعنی حد اکتر حجم مجاز ۲ مگابایت است.
  • متغییر AccessFileFormat : توسط این متغییر که از جنس string و آرایه میباشد، لیستی از فرمت های مجاز را مشخص میکنیم که مجاز است آپلود شود.
  • متغییر FolderName : نام فولدر یا فولدر هایی که میخواهیم فایل های ما در آنجا آپلود شود را مشخص میکنیم. مثلا اگر در روت در فولدری به نام Upload که داخل آن نیز فولدری دیگر وجود دارد به نام UserFile بخواهیم فایل های خود را آپلود کنیم باید به این صورت FolderName را پر کنیم /Upload/UserFile/
  • متغییر NewFileName : ممکن است فایل هایی که قصد آپلود داریم دارای نام های مشابه باشد در این صورت برخی از فایل ها را از دست میدهیم. برای اینکه اسم فایل های ما مشابه نشود از متدی به نام Guid استفاده میکنیم. تابع Guid توسط مایکروسافت نوشته شده و تضمین میکند رشته هایی که ایجاد میکند، به هیچ وجه تکراری نباشد.
  • متغییر FileContentLength : توسط دستور ContentLength حجم فایل ارسالی را دریافت میکند.
  • متغییر FileFormat : توسط دستور GetExtension فرمت فایل ارسالی را دریافت میکند. و توسط دستور ToLower اگر با حروف بزرگ باشد آن را به حروف کوچک تبدیل میکند. و توسط دستور Replace نقطه آن را حذف میکند.
  • متغییر FilePath : این متغییر توسط دستور Server.MapPath آدرسی که توسط متغییر FolderName گرفتیم را تبدیل به یک آدرس سمت سروری میکند.
  • متغییر FileAddress : این متغییر توسط دستور Path.Combine آدرس سمت سروری که ایجاد کردیم را همراه با نام جدید فایلی که ایجاد کردیم همراه با فرمت فایل ترکیب میکند و یک آدرس همراه با نام و فرمت فایل به صورت استاندارد ایجاد میکند.

int FileMaxContentLength = 2;
string[] AccessFileFormat = { "jpg", "png" };
string FolderName = "/Upload/UserFile/";
string NewFileName = Guid.NewGuid().ToString();
int FileContentLength = (MyFile.ContentLength/1024)/1024;
string FileFormat = Path.GetExtension(MyFile.FileName).ToLower().Replace(".", "");
string FilePath= Server.MapPath(FolderName);
string FileAddress = Path.Combine(FilePath + NewFileName + "." + FileFormat);

گام ششم : آیا حجم فایلی که ارسال شده مجاز است ؟

برسی حجم فایلی که ارسال شده بسیار مهم است چون ممکن است کاربری فایلی چند گیگی در سایت ما آپلود کند و باعث شود تا حجم هاست ما پر شود و مشکلاتی برای ما ایجاد شود. برسی این کار توسط ۲ متغییر که در گام پنجم تعریف کردیم صورت میپذیرد یعنی FileContentLength که نشان دهنده حجم فایل است و FileMaxContentLength که نشان دهنده حجم مجاز برای آپلود است.

if (FileContentLength < FileMaxContentLength)
{
//کد های آپلود فایل
}
else
{
ViewBag.Message = "حجم فایل آپلود شده مجاز نیست. ";
return View();
}

گام هفتم : آیا فرمت فایلی که ارسال شده مجاز است ؟

آیا فرمت فایلی که ارسالی مجاز است؟ چون ممکن است هکر ها فایل های مخربی را در سایت ما آپلود کنند و باعث آسیب به سایت ما شود.

برسی این کار توسط ۲ متغییر که در گام پنجم تعریف کردیم صورت میپذیرد. یعنی FileFormat فرمت فایل آپلودی و AccessFileFormat لیستی از فرمت های مجاز است. و آیا فرمت فایل آپلود شده در لیست فرمت های مجاز وجود دارد یا خیر.

if (AccessFileFormat.Contains(FileFormat))
{
//کد های آپلود فایل
}
else
{
ViewBag.Message = "فرمت فایل مجاز نیست. ";
return View();
}

گام هشتم : ذخیره فایل در سرور

ساده ترین گام ذخیره فایل در سرور میباشد. دستور SaveAs و متغییر FileAddress در گام پنجم این کار انجام میشود.

MyFile.SaveAs(FileAddress);
ViewBag.Message = "فایل شما با موفقیت ارسال شد";
return View();

گام نهم : نمایش پیام موفقیت و یا ارور

توسط قطعه کد زیر پیام موفقیت و یا ارور آپلود فایل را در ویو اکشن مقصد نمایش میدهیم

<h1>Show Upload Message</h1>
@ViewBag.Message

رفع ارور های احتمالی

ارور هایی ممکن است با آن مواجه شوید، آنها را رفع کنید.

  • ارور شماره یک : The request filtering module is configured to deny a request that exceeds the request content length.

برای رفع این ارور به فایل web.config مراجعه کرده و کد زیر را داخل تگ configuration اضافه کنید.

<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>

  • ارور شماره دو : Maximum request length exceeded.

برای رفع این ارور به فایل web.config مراجعه کرده و به تگ httpRuntime اتربیوت maxRequestLength=”1048576″ را اضافه کنید.

<system.web>
<compilation debug="true" targetFramework="4.7.2"/>
<httpRuntime targetFramework="4.7.2" maxRequestLength="1048576"/>
</system.web>

کل کد های اکشن آپلود

public ActionResult ShowData(HttpPostedFileBase MyFile)
{
try
{
if (MyFile != null && MyFile.ContentLength > 0)
{
int FileMaxContentLength = 2; //mg
string[] AccessFileFormat = { "jpg", "png" };
string FolderName = "/Upload/UserFile/";
string NewFileName = Guid.NewGuid().ToString();
int FileContentLength = (MyFile.ContentLength / 1024) / 1024;
string FileFormat = Path.GetExtension(MyFile.FileName).ToLower().Replace(".", "");
string FilePath = Server.MapPath(FolderName);
string FileAddress = Path.Combine(FilePath + NewFileName + "." + FileFormat);
if (FileContentLength < FileMaxContentLength)
{
if (AccessFileFormat.Contains(FileFormat))
{
MyFile.SaveAs(FileAddress);
ViewBag.Message = "فایل شما با موفقیت ارسال شد";
return View();
}
else
{
ViewBag.Message = "فرمت فایل مجاز نیست. ";
return View();
}
}
else
{
ViewBag.Message = "حجم فایل آپلود شده مجاز نیست. ";
return View();
}
}
else
{
ViewBag.Message = "شما فایلی را برای آپلود مشخص نکرده اید.";
return View();
}
}
catch (Exception ex)
{
ViewBag.Message = "ERROR:" + ex.Message.ToString();
return View();
}
}

جستجو کنید

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

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

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد