public static void unzip(InputStream is, File destDir, String charsetName) {
		byte[] buffer = new byte[1024];
		ZipInputStream zis = null;
		FileOutputStream fos = null;
		try {

			if (!destDir.exists()) {
				destDir.mkdir();
			}

			zis = new ZipInputStream(is);
			ZipEntry ze = zis.getNextEntry();

			while (ze != null) {
				String fileName = ze.getName();

				File newFile = new File(destDir.getAbsolutePath(), fileName);

				if (!newFile.toPath().normalize().startsWith(destDir.getAbsolutePath())) {
					throw new RuntimeException("Bad zip entry");
				}
				if (newFile.getPath().contains("..")) {
					throw new IllegalArgumentException("zip entry should not contain .. in the path.");
				}
				if (ze.isDirectory()) {
					newFile.mkdirs();
				} else {
					fos = new FileOutputStream(newFile);
					int len;
					while ((len = zis.read(buffer)) > 0) {
						fos.write(buffer, 0, len);
					}
					IOUtils.closeQuietly(fos);
				}

				ze = zis.getNextEntry();
			}
		} catch (Exception e) {
			throw processException(e);
		} finally {
			IOUtils.closeQuietly(fos);
			IOUtils.closeQuietly(is);
			IOUtils.closeQuietly(zis);
		}
	}
Unzip the given input stream into destination directory with the given
character set.

@param is          input stream
@param destDir     destination directory
@param charsetName character set name
ngrinder-core/src/main/java/org/ngrinder/common/util/CompressionUtils.java