[FastAPI] 파일업로드 > IT 기술백서

python-multipart 설치

[code]

pip install python-multipart

[/code]

1. bytes 로 수신하기

    1) file의 타입을 bytes 로 선언하면 파일을 읽고 메모리에 저장한다.

    2) 작은 파일일 경우에만 사용는게 좋다.

[code]

from fastapi import FastAPI, File

app = FastAPI()

@app.post(“/files/”)

aysnc def create_file(file: bytes = File(…)):

    return { “file_size”: len(file) }

[/code]

2. UploadFile 로 수신하기

    1) 메모리에 일단 저장하고 메모리 제한크기를 초과하면 디스크에 저장한다.

    2) 대용량파일업로드에서 잘 작동한다.

    3) 파일의 메타데이터를 가져올 수 있다.

    4) aysnc 인터페이스를 가지고 있다

[code]

from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post(“/uploadfile/”)

async def create_upload_file(file: UploadFile = File(…)):

    # 파일 읽기 (스레드 풀에서 실행하고 기다린다)

    contents = await file.read()

    

    # 파일에 직접 접근하여 읽기

    contents = file.file.read()

    return {

        “filename”: file.filename, # 파일명

        “content_type”: file.content_type, # mimetype

        “file”: file.file # 실제 파일 객체

        “size”: file.size # 파일크기

    }

[/code]

3. 여러 파일 업로드

[code]

@app.post(“/files/”)

async def create_files(files: List[bytes] = File(…)):

    return { “file_sizes”: [len(file) for file in files] }

    

@app.post(“/uploadfiles/”)

async def create_upload_files(files: List[UploadFile] = File(…)):

    return { “filenames”: [file.filename for file in files] }

[/code]

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤