본문 바로가기
Python

Python - Header Content-Disposition의 UTF-8에서 Filename 가져오기

by 올엠 2024. 2. 29.
반응형

웹을 이용해서 파일을 다운로드하였을때, 파일이름에 대한 정보가 필요한 경우가 있다.

이때 유용하게 사용할 수 있는 헤더 정보가 있는데, 바로 Content-Disposition 이다.

Content-Disposition 에는 보통 파일 이름 정보를 함께 보내주는 경우가 있다. 하지만 한글인 경우 UTF-8로 디코딩을 해야 정상적으로 확인이 가능하다. 여러가지로 코드를 테스트해본 결과 unquote를 활용하여 디코딩이 가능하다는 것을 알게 되었는데, 아래 코드를 이용해서 파일 이름정보를 가져올 수 있다.

from urllib import parse

def get_filename(source_header):
    fname = re.findall("filename\*=([^;]+)", source_header, flags=re.IGNORECASE)
    if not fname:
        fname = re.findall("filename=([^;]+)", source_header, flags=re.IGNORECASE)
    if "utf-8''" in fname[0].lower():
        fname = re.sub("utf-8''", '', fname[0], flags=re.IGNORECASE)
        fname = parse.unquote(fname)
    else:
        fname = fname[0]
    return fname

 

 

헤더는 아래와 같이 requests로 받아온 결과를 이용할 수 있다.

#'attachment; filename="\\uc911\\ud654\\uc694\\ub9ac \\ub3c4\\uc6d0.zip"; filename*=UTF-8\'\'올엠.zip'
filename = get_filename(fname_resp.headers["Content-Disposition"])

안전을 위해서 Content-Disposition 가 있는지 확인하는 코드를 추가하면 좋다.

반응형