آپلود و دانلود فایل در ASP.net MVC

تفاوت عمده ای که چارچوب asp.net با asp.net mvc دارد این است که کنترل های سرور آسان در mvc از بین رفته است. به همین منظور به راحتی نمی شود فایل ها را در آن آپلود و دانلود کرد. در این مقاله ، نحوه انجام عملیات آپلود فایل و دانلود فایل در MVC را یاد خواهیم گرفت.

مجموعه کامل آموزش ASP.Net MVC5 همراه با طراحی قالب – پروژه وب سایت خبری مبتنی بر نقشه

مراحل ابتدایی

  1. یک برنامه MVC ایجاد کنید.
  2.  یک کلاس کنترلر ایجاد کنید.
  3. بسته به نوع کلاس کنترلر، View را ایجاد کنید.
  4. RouteConfig را در صورت لزوم تغییر دهید.
  5. برای عملکردها ActionResult ایجاد کنید.
  6. یک فولدر ایجاد کنید که در آن باید فایل های دانلود شده را ذخیره کنیم.

چگونه در asp.net mvc به آپلود و دانلود فایل بپردازیم؟

کار را با ایجاد یک کنترلر به نام “myAction” شروع کنیم.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace UploadDownloadInMVC.Controllers
{
    public class myActionController : Controller
    {
        //
        // GET: /myAction/
    }
}

 

همانطور که مشاهده می کنید کنترلر خالی است. در ادامه نتایج action را خواهیم نوشت.

public ActionResult Index()
       {
           foreach (string upload in Request.Files)
           {
               if (Request.Files[upload].FileName != "")
               {
                   string path = AppDomain.CurrentDomain.BaseDirectory + "/App_Data/uploads/";
                   string filename = Path.GetFileName(Request.Files[upload].FileName);
                   Request.Files[upload].SaveAs(Path.Combine(path, filename));
               }
           }
           return View("Upload");
       }

 

نتیجه عملکردی که در بالا نشان داده شده برای index. است. بنابراین ، هر زمان که برنامه دانلود می شود ، نتیجه عمل لغو می شود. برای آن ، باید تغییرات زیر را برای RouteCofig اعمال کنید.

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "myAction", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

 

همانطور که در عملکرد Index مشاهده می کنید ، ما در حال بررسی این موضوع هستیم که آیا پارامتر درخواست شده شامل فایل ها می باشد یا خیر. در صورت وجود ، فایل انتخاب شده را در فهرست ذخیره خواهیم کرد.
/ App_Data / uploads / (که باید به صورت دستی در برنامه خود ایجاد کنیم). پس از بازگشت به نمای آپلود ، باید آن را تنظیم کنیم.

نمای آپلود ( Upload View )

کد زیر برای نمای آپلود است.

@{
    ViewBag.Title = "Upload";
}
<h2>Upload</h2>
<script src="~/Scripts/jquery-1.11.1.min.js"></script>
<script>
    $(document).ready(function () {
        $(‘#btnUploadFile’).on(‘click’, function () {
            var data = new FormData();
            var files = $("#fileUpload").get(0).files;
            // Add the uploaded image content to the form data collection
            if (files.length > 0) {
                data.append("UploadedImage", files[0]);
            }
            // Make Ajax request with the contentType = false, and procesDate = false
            var ajaxRequest = $.ajax({
                type: "POST",
                url: "myAction/Index",
                contentType: false,
                processData: false,
                data: data
            });
            ajaxRequest.done(function (xhr, textStatus) {
                // Do other operation
            });
        });
    });
</script>
<input type="file" name="FileUpload1″ id="fileUpload" /><br />
<input id="btnUploadFile" type="button" value="Upload File" />
@Html.ActionLink("Documents", "Downloads")
In the upload view, we have the following:

 

در نمای آپلود ، موارد زیر را داریم:
فایل آپلود
دکمه آپلود
فراخوانی Ajax با کنترلر (myAction / Index)
در اینجا ، محتوای تصویر آپلود شده را به مجموعه داده فرم اضافه می کنیم.

var data = new FormData();
           var files = $("#fileUpload").get(0).files;
           // Add the uploaded image content to the form data collection
           if (files.length > 0) {
               data.append("UploadedImage", files[0]);
           }

 

هنگامی که داده ها به مجموعه داده های فرم اضافه می شوند ، ما از طریق فراخوانی Ajax از دیتابیس یا همان پایگاه داده، داده ها را به کنترلر منتقل می کنیم. اگر رویه به خوبی پیش رود ، خروجی را به صورت زیر مشاهده خواهیم کرد:

 

هنگامی که فایل را انتخاب می کنید و روی دکمه آپلود کلیک می کنید ، فایل انتخاب شده شما ، همانطور که آن را در کنترلر تنظیم کرده ایم در فولدر “uploads” بارگذاری می شود.

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

public ActionResult Downloads()
        {
            var dir = new System.IO.DirectoryInfo(Server.MapPath("~/App_Data/uploads/"));
            System.IO.FileInfo[] fileNames = dir.GetFiles("*.*"); List<string> items = new List<string>();
            foreach (var file in fileNames)
            {
                items.Add(file.Name);
            }
            return View(items);
        }
        public FileResult Download(string ImageName)
        {
            var FileVirtualPath = "~/App_Data/uploads/" + ImageName;
            return File(FileVirtualPath, "application/force-download", Path.GetFileName(FileVirtualPath));
        }

 

آیا به خاطر دارید که یک لینک اکشن در نمای “آپلود” تنظیم کردیم؟

@Html.ActionLink("Documents", "Downloads")

 

در مرحله بعدی ، اگر روی لینک ” Documents ” کلیک کنیم ، نتیجه عملکرد دانلود برداشته خواهد شد. کد زیر توضیح می دهد که چه اتفاقی می افتد.

var dir = new System.IO.DirectoryInfo(Server.MapPath("~/App_Data/uploads/"));
            System.IO.FileInfo[] fileNames = dir.GetFiles("*.*"); 
            List<string> items = new List<string>();
            foreach (var file in fileNames)
            {
                items.Add(file.Name);
            }
            return View(items);
We are considering all the attached files, adding the file information to a list and returning t

 

ما در حال بررسی تمام فایل های پیوست شده ، اضافه کردن اطلاعات فایل به لیست و بازگشت این لیست به نمای “دانلود” هستیم. در مرحله بعدی ، به تنظیم نمای دیگری باید بپردازیم. کد زیر برای نمای دانلود است.

نمای دانلود

@{
    ViewBag.Title = "Downloads";
}
<h2>Downloads</h2>
@model List<string>
<h2>Downloads</h2>
<table>
    <tr>
        <th>File Name</th>
        <th>Link</th>
    </tr>
    @for (var i = 0; i <= Model.Count – ۱; i++)

    {

        <tr>
            <td>@Model[i].ToString() </td>
            <td>@Html.ActionLink("Download", 
            "Download", new { ImageName = @Model[i].ToString() }) </td>
        </tr>
    }
</table>

 

در اینجا ، اطلاعات مربوط به فایل آپلود و یا فایل های آپلود شده (که از کنترلر فرستاده می شود) و Html.ActionLinks را به صورت پویا ایجاد می کنیم.
توجه داشته باشید که در حال اضافه کردن نام تصویر به action هستیم. پس از انجام عملیات خروجی به این صورت می باشد.

دانلود فایل در ASP.net MVC

 

مانند تصویر بالا ، وقتی موس را روی لینک قرار می دهید ، نام تصویر به همراه URL کنترلر نشان داده می شود. برای دانلود فایل می توانید روی لینک کلیک کنید.

نتیجه

در این مقاله سعی بر این شد که راه حلی آسان برای آپلود کردن و دانلود کردن فایل در asp.net mvc در اختیار شما قرار دهیم. البته راه های دیگری هم برای upload و download فایل در asp.net mvc وجود دارد. راه گفته شده در این مقاله توسط ایجاد یک کلاس کنترلر ، و عملکرد actionresult صورت می گیرد و کد ها به زبان جاوا اسکریپت می باشند. فایل آپلود و فایل دانلود از دیتابیس و یا همان پایگاه داده، فراخوانی می شوند.