Computer/ASP

zip,unzip 컴포넌트

알찬돌삐 2012. 8. 10. 16:26


asp_zip_unzip.zip


 

백수다보니 할짓이 없어서 쓸데없는 글 하나 남깁니다.
데브피아 질문&답변 게시판 보면 가끔, 아주 가끔씩 올라오는 질문중 하나가
asp로 서버에 압축을 하거나, 압축풀기를 어떻게 하냐는겁니다.

몇년동안 개발하면서 그러한 작업은 필요한적이 없어서 별로 생각해본 기회가없었는데
오늘 문득 그런 질문글을보니 간편하게 컴퍼넌트로 만들면 어떨까 하는 생각이 들어서
대강 대강 어디서 소스구해서 테스트해보고 나름대로 이 정도면 간단한 예제용으로 괜찮다싶어서 글 올립니다.

원랜 가장 간단한 예제형식으로 압축/압축해제만 가능한 컴퍼넌트를 직접 만들어볼까했는데 내공이 존내 부족하다보니 지레겁부터먹고 그냥 코드구루에 아주 잘 만들어진 컴퍼넌트만 이용했습니다.-_-

돌아다니다보니 이것 저것 압축관련 모듈, 예제들이 많이 있었는데 그 중에서 코드구루에 있던 예제가 괜찮아서
그 예제 이용합니다. 원랜 거기에 VB용으로 예제 있던것 그냥 asp로 제가 바꾼것 뿐입니다.
뭐...이렇게 말하니 몇분간 VB -> asp용으로 포팅하고선 뚝딱 끝낸듯 싶지만 제가 머리가 안좋아서 오랫동안 삽질했습니다.

제가한 삽질을 다른분들은 하기싫다면 아래 예제 잘 보시면 될겁니다(아마도;;)

  • 1. 제가 첨부한 파일을다운 받으신후 zip32.dll과 unzip32.dll을 윈도우 system32 디렉토리 안에 넣습니다.
    windows 2000계열 -> c:\winnt\system32
    windows 9x, XP계열 -> c:\windows\system32
  • 2. 웹서버의 루트에서 폴더 하나 생성합니다. 저의 경우 "ziptest"로 폴더 생성했습니다.
    아마 c:\inetput\wwwroot\ziptest 이런식의 폴더구조가 될겁니다.
  • 3. 이 생성한 ziptest에 권한을 줘야합니다. 이것때문에 압축이안되거나 압축해제가 안되서 꽤나 오랫동안 삽질했습니다.
    windows 2000 계열이라면 단순히 ziptest 폴더 속성 권한에서 everyone 사용자 추가한후에 읽기/쓰기 권한주면 될텐데
    windows xp를 제가 이용한지 몇일 안된지라 windows 2000처럼 폴더권한 바꾸는 방법을 몰라서 헤맸습니다.
    xp에선 그냥 폴더 속성에 "공유"탭 누른후에 "네트워크에서 이 폴더 공유", "네트워크 사용자가 내 파일을 변경할 수 있음"
    이 2개 옵션에 체크하고선 확인만 누르면 되더군요 -_-
  • 4. 첨부파일중에 CGZipLibrary.dll 파일을 ziptest 폴더 안에 둡니다.
    뭐 이 dll파일은 아무대나 둬도 상관없지만 그냥 여기다 둡니다. -_-
    CGZipLibrary.dll 이 파일을 레지스트리에 등록해야합니다. 혹 깜빡하시는 분들을 위해서
    RegSvr32 c:\inetpub\wwwroot\ziptest\CGZipLibrary.dll 이렇게 해서 등록합니다.
  • 5. 아래 asp 소스코드를 이용해서 압축/ 압축풀기를 하면 끝! 입니다.
<%
    '=====================================================
    ' 압축
    '=====================================================
    Dim oZip
    Set oZip = CreateObject("CGZipLibrary.CGZipFiles")

    oZip.AddFile "C:\Inetpub\wwwroot\default.asp"
    oZip.AddFile "C:\Inetpub\wwwroot\test.txt"
    'oZip.AddFile "C:\Inetpub\wwwroot\*.*"      ' 이렇게하면 wwwroot폴더안의 모든파일/폴더 압축
    oZip.ZipFileName = "C:\Inetpub\wwwroot\ziptest\test.zip"
    oZip.UpdatingZip = False
    
    If oZip.MakeZipFile <> 0 Then
        response.write oZip.GetLastMessage
    End If

    Set oZip = Nothing

    '=====================================================
    ' 압축 해제
    '=====================================================
    Dim oUnZip
    Set oUnZip = CreateObject("CGZipLibrary.CGUnzipFiles")
    
    oUnZip.ZipFileName = "C:\Inetpub\wwwroot\ziptest\test.zip"
    oUnZip.ExtractDir = "C:\Inetpub\wwwroot\ziptest\extractfolder"
    If oUnZip.Unzip <> 0 Then
        response.write oUnZip.GetLastMessage
    End If
    Set oUnZip = Nothing
%>

참고한 정보들 입니다.

코드구루 zip/unzip 관련 글

http://www.codeguru.com/vb/gen/vb_graphics/fileformats/article.php/c6743/

위의 url에서 압축관련 모듈을 다운받으면 VB에서 실행해볼 수 있습니다. 압축풀면 CGZipLibrary.dll 파일이 있을텐데 제가 올린 파일과 코드구루에 있는 CGZipLibrary.dll 파일이 아주 쪼금 틀립니다. 코드구루의 CGZipLibrary.dll 은 압축할때 디렉토리 경로까지 압축을 해버려서 제가 코드 수정해서 재컴파일한겁니다. 수정한 부분은 아래와 같습니다.

CGZipFiles.cls 파일에서 MakeZipFile 함수를 보면 iIgnorePath 부분 변수 사용한곳이있는데 그곳의 값을 '1' 로 바꾼후 재컴파일 한겁니다. 이게 0,1 두가지 옵션이 있는데 '0' 일경운 디렉토리 경로까지 압축하고 '1' 일경우엔 경로무시합니다.

이 글은 스프링노트에서 작성되었습니다.


.

'Computer > ASP' 카테고리의 다른 글

Wscripting  (0) 2012.08.10
xmlhttp 를 통한 데이터 교환  (0) 2012.08.10
asp 용 UTF8 컨버터  (0) 2012.08.10
효율적인 페이징 기법  (0) 2011.11.29
ASP 에서 UTF-8 처리  (0) 2011.11.29