نحوه آپلود فایل های حجیم در ASP.NET MVC شاید مشکل بسیاری از برنامه نویسان تازه کار باشد که در هنگام آپلود در input type file به آن بر میخورند. ما در این مقاله از سری مقالات آموزش برنامه نویسی در وبسایت پرعلم قصد داریم تا این مشکل را بررسی کرده و آن را رفع کنیم. پس با ما همراه باشید.
ابتدا باید یک پروژه ASP.NET MVC برای این منظور بسازید که ما فرض را بر این میگیریم که وقتی شما این به این مشکل برخورد کرده اید و آن را جستوجو کرده اید یعنی پروژه ی خود را ساخته اید و فقط در مرحله آپلود فایل مشکل دارید. اما چنانچه در این مورد نیز مشکل دارید با ما در مقاله مراحل ایجاد پروژه ASP.NET MVC در Visual Studio 2017 همراه باشید.
ساخت فرم ارسال فایل
ابتدا یک فرم و یک Action برای ارسال فایل میسازیم، که با استفاده از آن فایل را به سرور ارسال کنیم:
@using(Html.BeginForm(“Upload” , “Home” , new { enctype = “multipart/form-data” }))
{
<input type=”file” name=”File” />
<br />
<input type=”submit” Value=”ارسال” />
}
همانطور که میبینید، این فرم، فایل را به اکشن Upload در کنترلر Home ارسال میکند. پس به Home Controller رفته و اکشن زیر را میسازیم:
public ActionResult Upload(HttpPostedFileBase File)
{
if(File != null)
{
string filename = “MyFile” + Path.GetExtention(File.Filename);
string path = Path.Combine (Server.MapPath(“~/Content/Files/”) , filename);
File.SaveAs ( path );
ViewBag.Message = “فایل با موفقیت آپلود شد”;
return View();
}
ViewBag.Message = “متاسفانه فایل آپلود نشد”;
return View();
}
تنطیمات web.config برای آپلود فایل حجیم
به صورت پیشفرض شما در فرمی مانند فرم بالا که از input type file استفاده میکنید، حداکثر حجم فایلی که میتوانید آپلود کنید برابر با 4 مگابایت میباشد. اما اگر در برنامه ی خود نیاز به آپلود فایل حجیم را دارید در قسمت web.config باید تنظیماتی راانجام دهید:
ابتدا در قسمت <system.web> باید تنظیماتی را اضافه کنید مانند زیر:
<system.web>
<httpRuntime targetFramework = “4.6.1” executionTimeout=”999999″ maxRequestLenth=”1048576″ />
</system.web>
اما فقط این کافی نیست و قسمت دیگری را نیز باید به فایل web.config اضافه کنید: (پس از این تنظیمات درباره آنها توضیح خواهم داد)
بلافاصله پس از </system.wb> :
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowContentLenth=”1073741824″></requestLimits>
</requestFiltering>
</security>
</system.webServer>
اما باید بگوییم که واحد این اندازه در maxRequestLenth برابر با Kilobyte است
و در maxAllowContentLenth برابر با byte میباشد.
بنابر این تنظیماتی که ما در این قسمت انجام دادیم مقدار حداکثر حجم آپلود فایل را 1 گیگ قرار دادیم که شما بسته بهنیاز خود میتوانید آن را تغییر دهید و یا این تنظیمات را همین 1 گیگ قرار داده و طبق دستورات زیر در برنامه حجم فایل را کنترل کنید.
چک کردن حجم فایل در اکشن
برای اینکه حجم فایل آپلود شده توسط کاربر را در اکشن چک کنید و اجازه ی آپلود فایل های حجیم را ندهید میتوانید از ContentLenth به صورت زیر استفاده کنید:
if(Fiile.ContentLenth / 1024 <= 1024)
{
File.SaveAs(…)
}
طبق این شرط فقط فایل هایی که دارای حجم کمتر یا مساوی 1 مگابایت هستند اجازه Save شدن دارند.
چک کردن پسوند فایل
همچنین برای اینکه پسوند فایل آپلود شده را چک کنید میتوانید از File.ContentType استفاده کنید. مثلا اگر میخواهید فقط تصاویر با فرمت های jpg,png قابل آپلود باشد از شرط زیر استفاده کنید:
if(File.Contenttype==”image/jpeg” || File.ContentType == “image/png”)
برای اطلاعات بیشتر در این باره وهمچنین پیدا کردن ContentType های مختلف اینجا : (Common MIME types) را مشاهده کنید.
امیدوارم که این مقاله برای شما مفید بوده باشد. با آرزوی موفقیت برای همه ی شما کاربران عزیز وبسایت پرعلم