آپلود فایل و تبدیل به فرمت Zip در Asp.net
چهارشنبه 13 آبان 1394در این مقاله قصد داریم یک فایل را آپلود نماییم و بعد از آپلود کردن فایل آن را به فایل Zip تبدیل نماییم ، در این مقاله هدف استفاده از کلاس ZipArchive, ZipArchiveEntry که در .Net 4.5 است
یک پروژه ی جدید ایجاد نمایید ، و .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 شده در پوشه قرار می گیرد.
خروجی به صورت زیر خواهد بود:

- ASP.net
- 3k بازدید
- 0 تشکر