دانلود چند فایل فشرده شده در MVC

در این مقاله توضیح خواهیم داد که چگونه چندین فایل را که فشرده سازی شده اند را با استفاده از ASP.NET MVC 5 دانلود کنیم.

دانلود چند فایل فشرده شده در MVC

معرفی :

 روش های مختلفی  برای دانلود  چندین فایل  با فرمت zip  وجود دارد اما ما در این مقاله ساده ترین روش را بررسی خواهیم کرد.

ما می توانیم چند فایل را با استفاده از فرمت فایل های فشرده را از منابع مختلف به مکان های مقصد، مانند مسیر سرور( Server path ) و یا مسیر شبکه(Network path) دانلود کنیم.

ما در این مقاله خواهیم دید که چگونه فایل ها را  از مسیر سرور به مانند مسیر شبکه  دانلود میکنیم.

ما باید به پوشه مربوطه از جایی که ما آن را دانلود یا آپلود میکنیم چه از سمت سرور و یا هر مسیر شبکه دیگر اجازه بدهیم.

مراحل زیر برای دانلود چند فایل با فرمت  zip را دنبال کنید.

مرحله 1:

رفتن به  Visual Studio و باز کردن  ASP.NET Web application و یک نام برای آن  تعریف میکنیم.

مرحله 2  :

انتخاب کردن MVC template از پنجره template ها و سپس OK را  کلیک میکنیم.

مرحله 3 :

رفتن به Solution Explorer و سپس روی آن  کلیک راست میکنیم، گزینه add را میزنیم  و سپس controller جدیدی را  به پروژه  اضافه میکنیم.

پنجره Controller  باز میشود و گزینه “MVC Controller- Empty” را انتخاب  و add را میزنیم و سپس روی ok  کلیک میکنیم.

مرحله 4 :

کلاس و  propertie های آن برای اطلاعات فایل را  اضافه میکنیم.

روی پوشه ی Models  کلیک راست میکنیم روی  add کلیک و از پنجره ی باز شده Class  را انتخاب میکنیم و در آخر نام کلاس را انتخاب میکنیم.

مرحله 5 :

بعد از اضافه کردن کلاس ، propertie های ان را اضافه میکنیم.

این propertie  ها برای گرفتن و ذخیره کردن فایل ها به ما کمک میکند.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
namespace MutipleFileDownload.Models {  
    public class FileInfo {  
        public int FileId {  
            get;  
            set;  
        }  
        public string FileName {  
            get;  
            set;  
        }  
        public string FilePath {  
            get;  
            set;  
        }  
    }  
}

مرحله 6 :

کلاس دیگری در فولدر Models برای گرفتن فایل ها از مکان های مربوطه اضافه میکنیم.ما میتوانیم فایل هایمان را از مسیر سرور یا مسیر شبکه بگیریم(عمل fetch).

به کلاس “FileDownlod” ما  name space یی با نام “FileInfo” را اضافه میکنیم.

کد برای fetch کردن فایل ها:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using MutipleFileDownload;  
using System.IO;  
namespace MutipleFileDownload.Models {  
    public class FileDownloads {  
        public List < FileInfo > GetFile() {  
            List < FileInfo > listFiles = new List < FileInfo > ();  
            string fileSavePath = System.Web.Hosting.HostingEnvironment.MapPath("~/Images");  
            DirectoryInfo dirInfo = new DirectoryInfo(fileSavePath);  
            int i = 0;  
            foreach(var item in dirInfo.GetFiles()) {  
                listFiles.Add(new FileInfo() {  
                    FileId = i + 1,  
                        FileName = item.Name,  
                        FilePath = dirInfo.FullName + @ "\" + item.Name  
                });  
                i = i + 1;  
            }  
            return listFiles;  
        }  
    }  
}  

مرحله 7 :

در “FileDownloadController” ما متد های action  را اضافه میکنیم.

روی متد action با نام  “FileHome” کلیک راست کرده و گزینه “Add View“ را انتخاب میکنیم.

و سپس بر روی  “Add”  کلیک میکنیم.

بعد از اضافه کردن صفحه View ، کد های زیر را برای طراحی صفحی دانلود اضافه میکنیم.

مرحله 8 :

ما نیاز به دو پیاده سازی برای فشرده سازی بسیاری از فایل ها برای دانلود داریم.

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

پیاده سازی ها :

• System.IO.Compression

• System.IO.Compression.FileSystem

این دو را به solution خود با روش زیر اضافه میکنیم.

بر روی "Reference" کلیک راست میکنیم،  “Add Reference” را انتخاب میکنیم تا پنجره مربوط به آن باز شود.

نوار سمت چپ Assemblies را بسط میدهیم. Framework را انتخاب میکنیم. و دو assemblie بالا را انتخاب میکنیم.

و سپس ok را انتخایب میکنیم.

مرحله 9 :

در کنترل مربوطه متد دانلود را اضافه میکنیم.

این روش برای ادغام تمام فایل های به عنوان یک فرمت فشرده استفاده می شود.

public ActionResult Download() {  
    FileDownloads obj = new FileDownloads();  
    //////int CurrentFileID = Convert.ToInt32(FileID);  
    var filesCol = obj.GetFile().ToList();  
    using(var memoryStream = new MemoryStream()) {  
        using(var ziparchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) {  
            for (int i = 0; i < filesCol.Count; i++) {  
                ziparchive.CreateEntryFromFile(filesCol[i].FilePath, filesCol[i].FileName);  
            }  
        }  
        return File(memoryStream.ToArray(), "application/zip", "Attachments.zip");  
    }  
} 

مرحله 10 :

بعد از اضافه کردن کد بالا ، پروژه را اجرا کنید و صفحه زیر را میبینیم.

دانلود فایل از مسیر شبکه :

ما همچنین میتوانیم فایل های خود را از مسیر شبکه هم دانلود کنیم.

برای این کار ما به تغییرات کوچکی در کلاس  “FileDownloads” نیازمندیم. کد های زیر را برای دانلود فایل از مسیر شبکه  اضافه کنید.

using MutipleFileDownload;  
using System.IO;  
namespace MutipleFileDownload.Models {  
    public class FileDownloads {  
        public List < FileInfo > GetFile() {  
            List < FileInfo > listFiles = new List < FileInfo > ();  
            //Path For download From Network Path.  
            string fileSavePath = @ "\\servername\FileFolderName";  
            DirectoryInfo dirInfo = new DirectoryInfo(fileSavePath);  
            int i = 0;  
            foreach(var item in dirInfo.GetFiles()) {  
                listFiles.Add(new FileInfo() {  
                    FileId = i + 1,  
                        FileName = item.Name,  
                        FilePath = dirInfo.FullName + @ "\" + item.Name  
                });  
                i = i + 1;  
            }  
            return listFiles;  
        }  
    }  
} 

کد کنترلر 

using MutipleFileDownload.Models;  
using System;  
using System.Collections.Generic;  
using System.IO;  
using System.IO.Compression;  
using System.Linq;  
using System.Web;  
using System.Web.Mvc;  
namespace MutipleFileDownload.Controllers {  
    public class FileDownloadController: Controller {  
        // GET: FileDownload  
        public ActionResult FileHome() {  
            return View();  
        }  
        public ActionResult Download() {  
            FileDownloads obj = new FileDownloads();  
            //////int CurrentFileID = Convert.ToInt32(FileID);  
            var filesCol = obj.GetFile().ToList();  
            using(var memoryStream = new MemoryStream()) {  
                using(var ziparchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) {  
                    for (int i = 0; i < filesCol.Count; i++) {  
                        ziparchive.CreateEntryFromFile(filesCol[i].FilePath, filesCol[i].FileName);  
                    }  
                }  
                return File(memoryStream.ToArray(), "application/zip", "Attachments.zip");  
            }  
        }  
    }  
} 

آموزش asp.net mvc

فایل های ضمیمه
دانلود نسخه ی PDF این مطلب