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]