requests-toolbelt 라이브러리를 사용할 때, upload_file에 대한 필드를 선언할 때 파일 이름과 Content-Type 헤더를 모두 지정해야 합니다. 예는 다음과 같습니다.
filename = 'my_file.txt' m = MultipartEncoder(fields={'upload_file': (filename, open(filename, 'rb'))}) r = requests.post( url, data=m, headers={'Content-Type': m.content_type}, verify=False, ) print(r.request.headers) # confirm that the 'Content-Type' header has been set.
또 다른 옵션은 스트리밍 파일 업로드를 효율적으로 처리할 수 있는 Python의 요청 또는 HTTPX 라이브러리를 사용하는 것입니다. 각각에 대한 예는 다음과 같습니다.
요청 사용:
import requests url = '...' filename = '...' with open(filename, 'rb') as file: r = requests.post( url, files={'upload_file': file}, headers={'Content-Type': 'multipart/form-data'}, )
HTTPX 사용:
import httpx url = '...' filename = '...' with open(filename, 'rb') as file: r = httpx.post( url, files={'upload_file': file}, )
HTTPX 자동 스트리밍 파일 업로드를 지원하는 반면, 요청에서는 Content-Type 헤더를 다음으로 설정해야 합니다. 'multipart/form-data'.
FastAPI의 .stream() 메서드를 사용하면 요청 본문을 스트림으로 액세스하여 대용량 파일을 메모리에 로드하는 것을 방지할 수 있습니다. . 이 접근 방식을 사용하려면 다음 단계를 따르세요.
업로드된 파일 크기가 다음을 초과하지 않는지 확인하려면 지정된 제한이 있는 경우 MaxSizeValidator를 사용할 수 있습니다. 예는 다음과 같습니다.
from streaming_form_data import streaming_form_data from streaming_form_data import MaxSizeValidator FILE_SIZE_LIMIT = 1024 * 1024 * 1024 # 1 GB def validate_file_size(chunk: bytes): if FILE_SIZE_LIMIT > 0: streaming_form_data.validators.MaxSizeValidator( FILE_SIZE_LIMIT). __call__(chunk)
다음은 이러한 기술을 통합하는 엔드포인트 예입니다.
from fastapi import FastAPI, File, Request from fastapi.responses import HTMLResponse from streaming_form_data.targets import FileTarget, ValueTarget from streaming_form_data import StreamingFormDataParser app = FastAPI() @app.post('/upload') async def upload(request: Request): # Parse the HTTP headers to retrieve the boundary string. parser = StreamingFormDataParser(headers=request.headers) # Register FileTarget and ValueTarget objects. file_ = FileTarget() data = ValueTarget() parser.register('upload_file', file_) parser.register('data', data) async for chunk in request.stream(): parser.data_received(chunk) # Validate file size (if necessary) validate_file_size(file_.content) # Process the uploaded file and data. return {'message': 'File uploaded successfully!'}
위 내용은 FastAPI 백엔드에 대용량 파일(3GB 이상)을 효율적으로 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!