[DEV] 기록

[Java] zip 파일 내 구성 확인하는 코드

꾸준함. 2023. 2. 14. 00:05

개요

클라이언트에서 올린 zip 파일이 유효한지 확인하기 위해 zip 파일 내 구성을 확인해야 했습니다.

저 같은 경우에는 엑셀 파일과 함께 wav 파일로만 이루어진 zip 파일을 감싼 zip 파일을 받아야 했습니다.

 

__MACOSX?

코드 소개에 앞서 __MACOSX 폴더의 존재에 대해 알 필요가 있습니다.

윈도우 환경에서 zip 파일을 만들 때는 사용자가 지정한 파일들로만 zip을 구성하지만

Mac의 경우 zip 파일을 만들 때 파일의 확장 정보를 기록하는 리소스 포크가 저장된 폴더인 __MACOSX 폴더를 zip 파일 내 같이 저장됩니다.

따라서, 코드에서 위 폴더를 확인하지 않도록 분기 처리를 해줘야 합니다.

 

코드


 

위 코드를 간단히 설명하자면 아래와 같습니다.

  • 클라이언트로부터 MultipartFile로 받은 zip 파일을 inputstream으로 변환한 뒤 validateUploadedZip 메서드를 호출합니다.
  • 앞서 개요에 설명했듯이 저 같은 경우 zip 파일이 wav 파일로만 이루어진 zip 파일 하나와 엑셀 파일 하나로만 구성되어 있어야 했습니다.
  • 따라서 __MACOSX 폴더를 제외한 파일들 확장자가 ".xlsx" 그리고 ".zip"인지 확인합니다.
    • 이때, 다른 확장자가 있을 경우 바로 false를 반환합니다.
    • 올바른 확장자일 경우 각 확장자의 개수를 나타내는 xlsxCnt와 zipCnt를 1 증가시켜 줍니다.
  • 확장자가 ".zip"일 경우 validateWavZip 메서드를 호출하여 똑같은 메커니즘을 통해 모두 wav 파일로만 구성되어 있는지 확인합니다.
    • 주의할 점은 validateWavZip 메서드의 경우 ZipInputStream을 닫으면 안 된다는 점입니다.
    • 스트림을 닫으면 안 되는 이유는 추가적으로 리서치 후 작성하도록 하겠습니다. (닫지 않으면 에러가 난다는 것만 알고 이유는 잘 모르겠습니다.)
  • 마지막으로 xlsxCnt와 zipCnt가 모두 1일 경우에만 true 아니면 false를 반환하여 파일 검증을 마칩니다.
반응형