How to create and download zipped files in .NET

Introduction

Have you ever encountered a scenario when you have to download a few files zipped and compressed? Few developments involving the manipulation of documents and their management would require this. There are many packages out in the market. In this article, I will be sharing the use of the DotNetZip package to zip, unzip, and compress files using C#, VB.NET, and any .NET language.

Practicality

Download the DotNetzip package from the NuGet package.

Download from here.

Once downloaded, it’s set to use the DotNetzip package to start zipping and compressing the files. For the files to be zipped, here I will be using the file path and selecting each to be zipped. Here, we will also see how a file is created on the fly (a PDF using Rotativa), saved in the same folder, and zipped.

File created on the fly using Rotativa

  1. var pdfResult = new Rotativa.PartialViewAsPdf(“~/Template.cshtml”, model) //This is HTML that would be generated as PDF  
  2. {  
  3.     FileName = “Template.pdf”  
  4. };  
  5. var resultSet = pdfResult.BuildPdf(ControllerContext);  
  6. if (resultSet != null) {  
  7.     string path = Path.Combine(Server.MapPath(subPath));  
  8.     FileStream fs = new FileStream(path + “.pdf”, FileMode.Create, FileAccess.ReadWrite);  
  9.     BinaryWriter bw = new BinaryWriter(fs);  
  10.     bw.Write(resultSet);  
  11.     bw.Close();  
  12. }  

The above code snippet generates a PDF using a CSS and HTML Razor View page using Rotativa and Rotativa. It is best to follow the mentioned article for more information on creating a PDF using Rotativa and MVC. Let’s look at the code snippet for zipping.

  1. using(ZipFile zipFile = new ZipFile()) {  
  2.     //Get all file paths from the folder  
  3.     String[] files = Directory.GetFiles(Server.MapPath(“/”));  
  4.     string fileUniqueName = “Template”  
  5.     foreach(string file in files) {  
  6.         if (file.Contains(fileUniqueName.ToString())) {  
  7.             zip file.AddFile(file, @ “TemplateDocs_” + DateTime.Now);  
  8.             //Adding files from the file path into Zip  
  9.         }  
  10.     }  
  11.     Response.ClearContent();  
  12.     Response.ClearHeaders();  
  13.     //Set zip file name  
  14.     Response.AppendHeader(“content-disposition”, “attachment; filename=TemplatedDocuments.zip”);  
  15.     zipfile.CompressionMethod = CompressionMethod.BZip2;  
  16.     zipfile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;  
  17.     //Save the zip content in the output stream  
  18.     zipFile.Save(outputStream);  
  19. }  
  20. //Set the cursor to start position  
  21. outputStream.Position = 0;  
  22. String[] filesToDelete = Directory.GetFiles(Server.MapPath(“/”));  
  23. foreach(string file in filesToDelete) {  
  24.     if (file.Contains(fileUniqueName.ToString())) {  
  25.         FileInfo fi = new FileInfo(file);  
  26.         fi.Delete();  
  27.     }  
  28. }  
  29. return new FileStreamResult(outputStream, fileType);  

The above snippet is just required to start zipping and compressing the files. As you can see, using block for the ZipFile is created with instantiation of its object.

Then, the files present under the path are navigated using Server.MapPath(“”), Once the path is set, the files if with some unique string character in the filename needs to be searched and only zipped, is set to a variable.

Then each file is looped through and added to the ZipFile object, here zipFile.AddFiles(file, ZippedFolderName); ZipFolderName is the name you set for the folder with all the files after extraction.

There are three compression levels for the ZipFile an enum which is described through code below,

  1. //  
  2. // Summary:  
  3. // The method of compression to use for a particular ZipEntry.  
  4. //  
  5. // Remarks:  
  6. // http://www.pkware.com/documents/casestudies/APPNOTE.TXT describes a n…
  7. // distinct compression methods that can be used within a zip file. DotNetZip supports  
  8. // a subset of them.  
  9. public enum CompressionMethod {  
  10.     //  
  11.     // Summary:  
  12.     // No compression at all. For COM environments, the value is 0 (zero).  
  13.     None = 0,  
  14.         //  
  15.         // Summary:  
  16.         // DEFLATE compression, as described in http://www.ietf.org/rfc/rfc1951.txt. This  
  17.         // is the “normal” compression used in zip files. For COM environments, the value  
  18.         // is 8.  
  19.         Deflate = 8,  
  20.         //  
  21.         // Summary:  
  22.         // BZip2 compression, a compression algorithm developed by Julian Seward. For COM  
  23.         // environments, the value is 12.  
  24.         BZip2 = 12  
  25. }  

The above are the three algorithms used. I have used only BZip2 based on a 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 handy to use and provides the compression algorithms that are good to go with.

Next recommended article Create Download and Open Zip File in PHP

Simple PHP function that can be used to create a ZIP file archive.

GENeration INVINCIble culture

A journey has just begun to create a culture, not an organization.

INVINCIX for start-ups

We at INVINCIX are determined to digitize 500+ start-ups in this era of digitization during the course of the upcoming two fiscal years, FY 2022–2023 and FY 2024–2025.

Business eXperience delivery – BXD

Dealing directly with the definition and goal of the business.

Prioritize : Optimal investment

Efficiency is something that requires constant study.

Elevated index of operations efficiency

Deeper comprehension of one another's working methods that will pay off in the long run.

Have faith and a philosophy

Our goal is to establish a GenInvinci organization with the capacity to "Engage," "Innovate," "Invent," and "Excel"

Corporate responsibility

A sense of satisfaction when you touch the heart with emotion.

INVINCIANS

We will keep our feet grounded, to ensure, your head is in the cloud.

Achievers

Honoring the exceptional INVINCIANS

Client speak

A minute to reflect on the success

Accolades

It means a lot to us.

Knowledge Corner

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Career

Join our Growing Team And Proud To Ba An INVINCIANS.

Contact us

Let's connect and find the solutions you need. Our team is ready and waiting to assist you with any questions or concerns you may have.

Business transformation and re-engineering

The framework for digital transformation makes excellence in "Innovation," "Agility," and "Responsiveness" possible

IT process and automation services

The software industry began with the automation of manual tasks. Over time, the automation changed and became known as "Digitalization services"

Software development services

Experience AD4P : Harness the power of IT to guarantee that your application is prepared for the future

Product engineering

Unique thoughts are valuable and creative thinking are hard to come by. A brilliant idea is always the source of a product

Simplified consulting

Our consulting will hold your hand and be part of you, through out transformation journey.

User experience services

Clear emphasis on the experience not on the interface make us a class apart .

Quality assurance

As enterprises look to software as a source of competitive advantage, they demand quality-at speed and scale.

White patches In black-box

Taking relevant info out of a data sea

E-board Online

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Barcode inventory

Using barcodes to manage inventory quickly

Routing matrix

Routing that is easy on the wallet while maintaining client satisfaction

DigiStack

Automating processes to increase efficiency in the service sector

Systems for managing vendors

Boost productivity and enable success with the vendor management system

System for managing spare parts

Simplifying the verification and control of your inventory

Instablood

Connecting world via blood

Metamorphosis of horizontal consulting

Implement the “Interpreted” “Inception”

Quality engineering

We don’t inspect quality, we inject quality

User experience

UX is the key not the interface…

Database CoE

Transforming Database Innovation and Performance / Empowering Data-Driven Excellence

Edgerp

Digital transformation is a business discipline

Agile office

“Swift and Simple” office automation

Invoicedge

Simplify e-Invoicing with our secured SaaS-based APIs

Telto

Make your service station digital

Glazox

Your digital event partner is here

White patches In black-box

Extracting meaningful data from ocean of data

Vendor management system

connecting hospitality industry smoothly

X Solutions

A mini ERP for all your need

Instablood

Connecting world via blood

Workshop calendar

Browse our workshop calendar for upcoming events and opportunities to expand your knowledge and skills.

Courses

Explore our diverse range of courses designed to cater to various interests, offering opportunities for personal and professional growth

India

Cuttack

Head Office

Sharadha Bhawan, Rajendra Nagar, Cuttack, Odisha - 753010, India

Bhubaneswar

Branch Office

Plot No.353, 1st Floor, Infocity Ave, Sishu Vihar, Patia, Bhubaneswar, Odisha - 751024, India

india_contact

Singapore

Branch Office

60 eu tong sen street #02 03 furama city center Singapore 059804

Singapore_contact

United Kingdom

Branch Office

Amba House, 15 College Road, Harrow, England, HA11BA

uk_contact

Vietnam

Branch Office

02nd Floor, Saigon Paragon Building, No.3 , Nguyen Luong Bang Street, Tan Phu Ward, District 07, Ho Chi Minh City, Vietnam

vietnam_contact