외부에 엑셀 파일 업로드 API를 연동했는데, 에러가 난다고 해 살펴보니 xlsx 포맷이 아니라 csv 포맷을 올려서 문제였던 것.
openpyxl
라이브러리를 이용해 엑셀 파일을 열게끔 코드가 짜져있었는데, 일단 load_workbook
은 csv 파일을 열지 못한다.
try-except 로 에러 핸들링을 하려고 보니, openpyxl의 Exception인 InvalidFileException
에 잡히지 않고 zipfile.BadZipfile
에러가 발생하는게 아닌가?!
추적해보니 두 가지 문제(?)가 혼재되어 있었다.
xlsx
파일은 실제로는 ZIP 아카이브 형식으로 구성되어 있다?!!! 관련 링크InvalidFileException
이 발생하지만, 요청(request)으로 들어온 파일은 InMemoryUploadedFile
객체로 생성되기 때문에 InvalidFileException
대신 BadZipfile
예외가 발생일단 엑셀 파일이 zip 형식이란 걸 처음 알아 놀라서 실제 zip 파일을 올리면 어떻게 되나 테스트 해보니 결과는 다음과 같다.
There is no item named '[Content_Types].xml' in the archive
란 에러 메세지 발생이건 또 뭔가해서 뒤져보니 (phind.com 땡큐) 아래와 같이 답해준다.
[Content_Types].xml
와 관계 부분들에 의해 관리