آپلود فایل و تبدیل به فرمت Zip در Asp.net

در این مقاله قصد داریم یک فایل را آپلود نماییم و بعد از آپلود کردن فایل آن را به فایل Zip تبدیل نماییم ، در این مقاله هدف استفاده از کلاس ZipArchive, ZipArchiveEntry که در .Net 4.5 است

آپلود فایل و تبدیل به فرمت Zip در Asp.net

یک پروژه ی جدید ایجاد نمایید ، و .Net 4.5 را انتخاب کنید ، یک صفحه با پسوند aspx ایجاد نمایید، و به صفحه ی خود فضای نام  System.IO.Compression و System.IO را اضافه نمایید.

می توانید قبل از خواندن این مقاله برای درک بهتر ادامه ی این مقاله ایجاد فایل zip در Asp.net را مطالعه نمایید.

کد های صفحه ی html به صورت زیر خواهد بود:

       <div>
                <asp:FileUpload ID="FileUpload1" runat="server" />
                <asp:Button ID="Button1" runat="server" Text="Button"
                    OnClick="Button1_Click" />
                <asp:GridView ID="GridView1" runat="server"></asp:GridView>
                <asp:Label ID="Label1" runat="server"></asp:Label>
            </div>

برای اینکه کلاس ZipArchive و ZipFile اضافه شود باید Nuget آن را به پروژه ی خود اضافه نمایید.

اگر روی پروژه راست کلیک نمایید و دو کلاس بالا را جستجو کنید آن را می توانید نصب نمایید.

code Behind به صورت زیر خواهد بود:

  void Upload()
        {
            if (!Directory.Exists(ZipfilePath))
                Directory.CreateDirectory(ZipfilePath);
            if (!Directory.Exists(UploadfilePath))
                Directory.CreateDirectory(UploadfilePath);
            if (FileUpload1.HasFile)
            {
                if (FileUpload1.PostedFile.ContentLength < Maxfilesize)
                {
                    try
                    {
                        string filename = Path.GetFileName(FileUpload1.FileName);
                        string _path = String.Format("{0}\\{1}", ZipfilePath, filename);
                        FileUpload1.SaveAs(_path);
                        string zipFileName = String.Format("{0}\\{1}_{2}.zip", UploadfilePath, DateTime.Now.ToString("MMddyyhms"), filename);
                        using (ZipArchive newFile = ZipFile.Open(zipFileName, ZipArchiveMode.Create))
                        {
                            newFile.CreateEntryFromFile(_path, filename);
                        }
                        delete(_path);
                        Label1.Text = string.Format("<font color='#080'>Status: File uploaded and zip file created!</font>", zipFileName);
                    }
                    catch (Exception ex)
                    {
                        Label1.Text = string.Format("<font color='#800'>Status: The following error occured: {0}</font>", ex.Message);
                    }
                }
            }
        }

        public static string ZipfilePath
        {
            get
            {
                return HttpContext.Current.Server.MapPath("~/createzip");
            }
        }
        public static string UploadfilePath
        {
            get
            {
                return HttpContext.Current.Server.MapPath("~/upload");
            }
        }

        public static int Maxfilesize
        {
            get
            {
                return 5242880;
            }
        }
        void delete(string file)
        {
            if (File.Exists(file))
                File.Delete(file);
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Upload();
        }

زمانی که یک BreakPoint قرار دهید و اجرا بگیرید و F10 را بزنید به صورت زیر خواهد بود:

در تابع بالا زمانی که کاربر فایل را انتخاب می کند و دکمه ی آپلود را می زند، تابع آپلود صدا زده می شود، در این تابع اگر پوشه ها درست نشده بود ابتدا پوشه ها را می سازد، و بعد کلاس ZipArchive فایل را zip می کند، و فایلی که آپلود شده بود حذف می شود و فایل zip شده در پوشه قرار می گیرد.

خروجی به صورت زیر خواهد بود:

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