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

IT 기술백서

직접 알아내거나 검색하기 귀찮아서 모아 둔 것

python | [FastAPI] 파일업로드

본문

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]

댓글 0개

등록된 댓글이 없습니다.

Menu