FastAPI에서 파일 업로드 처리하기

FastAPI는 파이썬의 웹 프레임워크로써, 간단하고 빠른 API 개발을 위해 설계된 도구입니다. 파일 업로드는 웹 애플리케이션에서 필수적인 기능 중 하나이며, FastAPI에서는 이를 간단하게 처리할 수 있습니다.

1. FastAPI에서 파일 업로드를 위한 준비

먼저, FastAPI에서 파일을 업로드하기 위해 필요한 패키지를 설치해야 합니다. 이를 위해 python-multipart 패키지가 필요합니다. 다음 명령을 사용하여 패키지를 설치합니다.

pip install python-multipart

2. FastAPI에서 파일 업로드 처리하기

FastAPI에서 파일을 업로드하기 위해서는 먼저 File 객체를 사용해야 합니다. 이를 위해 fastapi.UploadFile 모듈을 임포트합니다.

from fastapi import FastAPI, UploadFile, File

app = FastAPI()

@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
    contents = await file.read()
    # 파일 처리 로직 작성
    return {"filename": file.filename}

위의 예제 코드에서는 /upload 엔드포인트에서 파일을 업로드할 수 있습니다. file 인자는 UploadFile 타입으로 정의되어 있으며, File 객체를 통해 해당 파일을 전달할 수 있습니다. 업로드된 파일은 await file.read()를 통해 읽을 수 있습니다.

파일 처리 로직을 작성한 후에는 필요한 작업을 수행하고 반환하고자 하는 데이터를 return 문을 통해 JSON 형태로 반환합니다. 위의 예제에서는 간단히 업로드된 파일의 이름을 반환하도록 작성되었습니다.

3. 실제 사용 예제

FastAPI에서 파일 업로드를 처리하는 예제를 살펴보겠습니다. 예를 들어, 프로필 이미지를 업로드하고 이를 서버에 저장하는 기능을 구현한다고 가정해 봅시다.

@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
    # 프로필 이미지를 저장할 경로
    save_path = f"uploads/{file.filename}"

    # 파일 저장
    with open(save_path, "wb") as buffer:
        # 업로드된 파일을 청크 단위로 저장
        while True:
            chunk = await file.read(1024)
            if not chunk:
                break
            buffer.write(chunk)

    return {"filename": file.filename}

위의 예제에서는 업로드된 파일을 uploads 디렉토리에 저장하는 기능을 구현하였습니다. file.filename은 업로드된 파일의 이름을 의미합니다. 파일을 저장하기 위해 open 함수를 사용하고, 읽은 청크를 반복적으로 저장하는 방식으로 파일을 저장합니다.

마치며

FastAPI를 사용하면 파일 업로드 처리를 간단하고 효율적으로 수행할 수 있습니다. 위의 예제 코드를 통해 FastAPI에서 파일 업로드를 처리하는 방법을 익혀보세요. #FastAPI #파일업로드