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

چهارشنبه 13 آبان 1394

در این مقاله قصد داریم یک فایل را آپلود نماییم و بعد از آپلود کردن فایل آن را به فایل 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 شده در پوشه قرار می گیرد.

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

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید