Tistory View

간단히 보는 Zip파일 구조

 

초간단 Zip파일 구조 / 이 이상 알 필요도 없다.

Zip집파일은 단순히 압축된 정보를 그냥 배열을 해놓은 형태로 구성되어 있다. 하지만, 어떤파일이 있는 지에 대한 정보는 파일의 맨끝에 존재하기 때문에, 파일의 끝까지 읽기전에는 압축을 해제할 수가 없다.

위 그림에서 보이듯 파일의 끝에 정보가 있지만, 이 정보가 없어도 앞부분부터 차례대로 읽으면 압축을 풀 수도 있지만, 대부분의 Zip파일을 다루는 라이브러리들은 맨끝의 정보를 이용하여 파일정보를 처리하기 때문에 파일의 끝까지 읽어야 하는 점이 있다. Zip파일을 복구하는 프로그램은 맨끝의 정보없이 바로 처리하도록 만들어져 있다.

여기서는 복구하는 방식이 아닌 기존의 라이브러리를 사용할 것이기에 파일을 온전히 다 읽어야 처리할 수가 있다.

네트웍에서 Zip파일을 받아 처리해야 하는 경우, 파일을 받는동안 처리할 수가 없다는 뜻이다.

 

구글신을 뒤져 이리저리 zip파일을 다룰 수 있는 library를 물색해서 얻은 녀석이 다음의 녀석이다. 실제 뒤져도 이 것만 구할 수 있었고, 상당히 잘동작하는 걸로 보여 선택했다.

 

사전준비

다음의 github로 들어가서 파일을 다운로드 받아야 한다.

https://github.com/Stuk/jszip

dist폴더에 보면 jszip.min.js 파일이 있다. 이 녀석이 zip데이터를 다룰 수 있는 녀석이다. 상당히 크기가 작아 맘에 든다.

문제는 이 녀석은 Zip Data를 다루는 것만 있어서 파일을 읽는다든지 네트웍에서 파일을 끌어오는 코드는 포함되어있지 않다. 따라서, 현재 웹브라우저를 이용하여 서버에서 zip파일을 받아오려면 Ajax를 이용해야 될 텐데, 코드 만들기는 어렵지 않지만, 이 라이브러리를 만든 친구가 고맙게도 Ajax를 이용한 방식도 같이 만들어 두었다.

이 것은 다음의 github에 따로 처리가 되어 있다.

 

 

 

https://github.com/Stuk/jszip-utils

이 곳에 들어가서 dist폴더에 보면 jszip-utils.js파일이 있고 구형의 IE를 지원하기 위해 jszip-utils.ie.min.js파일이 있다.

Ajax를 사용하여 서버에서 파일을 받아오는 코드가 포함되어 있는 파일이다.

 

이제 이 파일들을 브라우저에서 읽을 수 있게 서버에 저장을 한다. 필자는 다른 것들과 충돌이 나지 않도록, web-root에 jszip폴더를 만들어 이 3개의 파일들을 넣었다. 

 

 

/

 |- jszip

      |- jszip.min.js

      |- jszip-utils.min.js

      |- jszip-utils.ie.min.js

 

 

이 파일들을 html코드에는 다음과 같이 넣는다.

..
<head>
	<script type="text/javascript" src="/jszip/jszip.min.js"></script>
	<script type="text/javascript" src="/jszip/jszip-utils.min.js"></script>
	<!--[if IE]
    	<script type="text/javascript" src="/jszip/jszip-utils.ie.min.js"></script>
    <![endif]-->
</head>
..
</html>

zip을 다루는 기본 라이브러리와 서버에서 데이터를 가져오기위한 jszip-util을 구형의 IE일 경우 구분해서 처리하고 있음을 보여준다.

 

혹시나 파일을 못 찾을 경우를 위해 업로드를 해두겠다.

jszip.zip
0.03MB

 

 

 

홈페이지 : https://stuk.github.io/jszip/

 

JSZip

JSZip is a javascript library for creating, reading and editing .zip files, with a lovely and simple API. Current version : v3.1.5 License : JSZip is dual-licensed. You may use it under the MIT license or the GPLv3 license. See LICENSE.markdown. Example va

stuk.github.io

이 곳의 메뉴에 API를 뒤져볼 수 있다.

 

이 라이브러리는 암호화되 집파일을 처리하지 못한다.

암호화를 지원하는 라이브러리를 찾았지만, 버그가 있어 어쩔 수 없이 이것으로 정했다.

 

 

 

Replies
Reply Write