Click here to Skip to main content
13,771,855 members
Click here to Skip to main content
Add your own
alternative version

Stats

3.7K views
10 bookmarked
Posted 23 Jul 2018
Licenced CPOL

Compress & Zip files using DotNetZip

, 23 Jul 2018
Rate this:
Please Sign up or sign in to vote.
Introduction Have you ever encountered a scenario when you have to download few files zipped and compressed! Few development involving the manipulation of documents and its management would require this. There are a lot of

Introduction

Have you ever encountered a scenario when you have to download few files zipped and compressed! Few development involving the manipulation of documents and its management would require this. There are a lot of packages out in the market. Here in this article, I would be sharing the use of DotNetZip package used to zip, unzip & compress files using C#, VB.Net & any .NET language.

Practicality

Download the DotNetzip package from Nuget package.
Download
Once downloaded, its all set to use the dotnetzip package to start zipping the files and compressing them. For the files to be zipped, here I will be using the file path and select each file to be zipped. Here also we will see how a file being created on the fly (a pdf using rotativa) is saved in same folder and zipped.

File created on the fly using Rotativa

var pdfResult = new Rotativa.PartialViewAsPdf("~/Template.cshtml", model) //This is HTML that would be generated as PDF    
                    {
                        FileName = "Template.pdf"
                    };
                    var resultSet = pdfResult.BuildPdf(ControllerContext);
                    if (resultSet != null)
                    {
                        string path = Path.Combine(Server.MapPath(subPath));
                        FileStream fs = new FileStream(path+".pdf", FileMode.Create, FileAccess.ReadWrite);
                        BinaryWriter bw = new BinaryWriter(fs);
                        bw.Write(resultSet);
                        bw.Close();
                    }

The above code snippet is generating a PDF using a cshtml Razor view page using Rotativa Using Rotativa Best to follow the mentioned article for more information to generate PDF using Rotativa using MVC.
Lets look at the code snippet for the Zipping.

using (ZipFile zipFile = new ZipFile())
                {
                    
                    //Get all filepath from folder
                    String[] files = Directory.GetFiles(Server.MapPath("/"));
string fileUniqueName = "Template"
                    memoRefCode = memoRefCode.Replace('/', '_');
                    foreach (string file in files)
                    {
                        if (file.Contains(memoID.ToString()))
                        {
                            zipFile.AddFile(file, @"MemoDocs_"+ memoRefCode); //Adding files from filepath into Zip 
                            
                        }
                    }

                    Response.ClearContent();
                    Response.ClearHeaders();

                    //Set zip file name
                    Response.AppendHeader("content-disposition", "attachment; filename=MemoDocuments.zip");
                    zipFile.CompressionMethod = CompressionMethod.BZip2;
                    zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                    //Save the zip content in output stream
                    zipFile.Save(outputStream);
                }

                //Set the cursor to start position
                outputStream.Position = 0;
                String[] filesToDelete = Directory.GetFiles(Server.MapPath("/"));
                foreach (string file in filesToDelete)
                {
                    if (file.Contains(memoID.ToString()))
                    {
                        FileInfo fi = new FileInfo(file);
                        fi.Delete();
                    }
                }
                //Dispance the stream
                return new FileStreamResult(outputStream, fileType);

The above are the three algorithms used. I personally have used only BZip2 based on few good reviews.
Once compressed and all files inserted into the folder, the zipped folder is ready to be downloaded using the FileStreamResult in MVC action.

Conclusion

This is the simple explanation and the code snippet for the Zip file concept. This is simple and really handy to be used and it also provides the compression algorithms which are good to go with.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Passion4Code
Software Developer (Senior)
India India
No Biography provided

You may also be interested in...

Pro

Comments and Discussions

 
-- There are no messages in this forum --
Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web05 | 2.8.181119.1 | Last Updated 23 Jul 2018
Article Copyright 2018 by Passion4Code
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid