FastAPI의 서버 측을 사용하여 대용량 파일 업로드
FastAPI 서버는 UploadFile 클래스를 사용하여 대용량 파일 업로드를 처리할 수 있습니다. 예는 다음과 같습니다.
async def uploadfiles(upload_file: UploadFile = File(...)): ...
클라이언트 측 요청 문제
클라이언트에서 대용량 파일을 보낼 때 다음으로 인해 문제가 발생할 수 있습니다.
.stream()을 사용하는 더 빠른 옵션
요청에 액세스 본문을 스트림으로 저장하면 전체 파일을 메모리에 로드하지 않아도 되어 업로드 속도가 빨라집니다. 이는 .stream() 메소드를 사용하여 달성할 수 있습니다. 다음은 스트리밍 양식 데이터 라이브러리를 사용하는 예입니다.
from streaming_form_data import StreamingFormDataParser from streaming_form_data.targets import FileTarget request_body = await request.stream() parser = StreamingFormDataParser(headers=request.headers) parser.register('upload_file', FileTarget(filepath)) async for chunk in request_body: parser.data_received(chunk)
UploadFile 및 Form을 사용하는 대체 옵션
일반 def 엔드포인트를 사용하려는 경우 다음과 같이 파일 업로드를 처리할 수 있습니다:
from fastapi import File, UploadFile, Form, HTTPException, status import aiofiles import os CHUNK_SIZE = 1024 * 1024 @app.post("/upload") async def upload(file: UploadFile = File(...), data: str = Form(...)): try: filepath = os.path.join('./', os.path.basename(file.filename)) async with aiofiles.open(filepath, 'wb') as f: while chunk := await file.read(CHUNK_SIZE): await f.write(chunk) except Exception: raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail='There was an error uploading the file') finally: await file.close() return {"message": f"Successfuly uploaded {file.filename}"}
HTTPX 클라이언트 늘리기 시간 초과
HTTPX 라이브러리를 사용할 때 대용량 파일 업로드 중 읽기 시간 초과를 방지하기 위해 시간 초과를 늘려야 할 수도 있습니다.
timeout = httpx.Timeout(None, read=180.0)
위 내용은 FastAPI를 사용하여 대용량 파일을 효율적으로 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!