Introduction
Recently, I had to build a club website where the user has the ability to download an image as a zip file. So, I planned to make a procedure which will automatically convert an image file to a zip file. Online search led me to a blog with this wonderful idea of using the ZIP option in J#, and it really attracted me.
Background
In this article, I will explain the usage of ZIP functionality in J# from C# code. The code in this application has been designed to reuse in a copy-paste fashion and not as a library.
This application consumes J# classes internally. For this, we must first refer to the J# .NET library. Physically, it resides as a file named vjslib.dll. If you are not very sure how to refer to a library in your project, please follow the steps below:
Right click your project in Server Explorer and click on "Add Reference" -> select the .NET tab -> scroll down and select "vjslib" -> click OK and you are there. Now, you can refer the Java library classes within your application.
Listing 1 - Directives
using java.util;
using java.util.zip;
using java.io;
The java.util.zip namespace contains the classes and methods to implement the compress and uncompress functionalities. The main classes used from the above namespaces are
- ZipFile
- ZipEntry
- ZipOutputSteam
- Enumeration
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using java.util;
using java.util.zip;
using java.io;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void lnkImage_Click(object sender, EventArgs e)
{
string FilePath = Server.MapPath("~/Image/");
string FileDest = Server.MapPath("~/Image/");
Zip(FileDest + "test.zip", FilePath + "Download_File_As_Zip_File/pic.jpg");
}
private void Zip(string zipFileName, string sourceFile)
{
FileOutputStream filOpStrm = new FileOutputStream(zipFileName);
ZipOutputStream zipOpStrm = new ZipOutputStream(filOpStrm);
FileInputStream filIpStrm = null;
filIpStrm = new FileInputStream(sourceFile);
ZipEntry ze = new ZipEntry(Path.GetFileName(sourceFile));
zipOpStrm.putNextEntry(ze);
sbyte[] buffer = new sbyte[1024];
int len = 0;
while ((len = filIpStrm.read(buffer)) >= 0)
{
zipOpStrm.write(buffer, 0, len);
}
zipOpStrm.closeEntry();
filIpStrm.close();
zipOpStrm.close();
filOpStrm.close();
FileInfo file = new FileInfo(zipFileName);
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition",
"attachment; filename=" + "test.zip");
Response.WriteFile(file.FullName);
Response.End();
}
protected void lnkSource_Click(object sender, EventArgs e)
{
FileInfo file = new FileInfo(Server.MapPath("~/Image/") +
"Downloadzip.zip");
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition",
"attachment; filename=" + "Downloadzip.zip");
Response.WriteFile(file.FullName);
Response.End();
}
}