반응형
FastAPI: 멀티파트/폼 데이터 요청을 사용하지 않고 파일을 업로드하는 방법은 무엇입니까?
나는 단식을 한다다음과 같은 파일 업로드를 처리하기 위한 API 끝점:
@app.post('/upload')
async def accept_some_file(f: UploadFile):
content = await f.read()
# ... do stuff with content and generate a response
암호화된 페이로드에서만 작동하는 것 같습니다.
다음과 같은 요청을 통해 파일 바이트를 직접 전송할 수 있습니다:
POST /upload HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.79.1
Accept: */*
Content-Type: image/jpeg
Content-Length: 11044
... image bytes
단식이 있나요API 설정을 사용하여 이를 허용할 수 있습니까? 아니면 이 사용 사례에 더 적합한 다른 요청 유형이 있습니까?
옵션 1
를 사용하면 요청 본문을 얻을 수 있습니다. 이 작업을 수행하려면(예: 엔드포인트를 대신 사용하여 vs. 참조) 를 참조하십시오.
from fastapi import Request
@app.post('/upload')
async def upload_file(request: Request):
body = await request.body()
옵션 2
("업데이트" 섹션 아래) 및 (파일 및 양식 데이터를 모두 수신하는 방법을 보여주는 또 다른 작업 예제를 제공하는) 에 설명된 대로 요청 본문에 액세스할 수도 있습니다. 이러한 방식으로, 요청 본문(예: 파일)이 서버의 RAM에 들어가지 못할 경우 문제가 발생할 수 있는 이전 옵션과 달리, 전체 본문을 메모리에 저장하지 않고 바이트 청크가 제공됩니다.
아래 예제에서는 바이트 청크를 RAM에 저장하는 변수에 저장하지만 이는 데모용입니다. 그러나 바이트 청크가 도착할 때 디스크에 써야 하는 경우 또는 라이브러리를 사용하는 방법에 대한 위의 링크된 답변을 확인하십시오.
@app.post('/upload')
async def upload_file(request: Request):
body = b''
async for chunk in request.stream():
body += chunk
반응형
'개발하자' 카테고리의 다른 글
폴라-피톤에서 행을 내리는 방법 (0) | 2023.05.02 |
---|---|
Svelte/Typescript 오류: 형식 선언 중 "예상치 못한 토큰" (0) | 2023.05.01 |
리벳의 상태 기계를 펄럭이는 방법은 무엇입니까? (0) | 2023.04.30 |
FastAPI: "ImportError: 알려진 상위 패키지가 없는 상대 가져오기 시도" (0) | 2023.04.30 |
TypeScript는 내보내기 선언 대신 정의된 선언이 있는 .d.ts 파일을 생성합니다 (0) | 2023.04.29 |