>백엔드 개발 >파이썬 튜토리얼 >FastAPI 파일 업로드 변수가 항상 비어 있는 이유는 무엇입니까?

FastAPI 파일 업로드 변수가 항상 비어 있는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-08 08:20:10551검색

Why is my FastAPI file upload variable always empty?

FastAPI를 사용하여 파일을 업로드하는 방법

배경

FastAPI는 깔끔하고 효율적인 방법을 제공하는 현대적인 고성능 웹 프레임워크입니다. API를 구축하세요. 파일 업로드는 많은 웹 애플리케이션에 필요한 기본 기능입니다. 이를 용이하게 하기 위해 FastAPI는 파일 업로드 처리를 위한 여러 옵션을 제공합니다.

문제

특정 시나리오에서는 FastAPI 설명서에 따라 파일을 업로드할 때 file2store 변수가 지속적으로 비어 있습니다. 이 문제는 Python의 UploadFile 또는 바이트 접근 방식을 활용하려는 시도에도 불구하고 지속됩니다.

해결 방법

이 문제를 해결하려면 다음 조치를 취할 수 있습니다.

1. Python-Multipart 설치

FastAPI는 양식 데이터를 사용하여 업로드된 파일을 전송합니다. "python-multipart"를 설치하면 업로드된 파일이 올바르게 처리됩니다.

pip install python-multipart

2. 메모리 친화적인 파일 처리 사용

FastAPI는 SpooledTemporaryFile 개체를 사용하여 업로드된 파일을 메모리에 저장합니다. 파일 크기가 1MB를 초과하면 디스크의 임시 파일에 기록됩니다. 대용량 파일의 경우 다음 옵션을 고려하십시오.

  • 파일을 청크로 읽기: 파일을 더 작은 청크로 나누고 순차적으로 처리합니다. 이렇게 하면 메모리 소비가 줄어들지만 처리 시간이 길어질 수 있습니다.
  • shutil.copyfileobj() 사용: 이 기능을 활용하면 파일 내용을 관리 가능한 청크로 복사하여 메모리 사용량을 최소화할 수 있습니다.

3. 엔드포인트 차단 방지

파일 업로드를 처리할 때 엔드포인트 기능은 async def 대신 def로 정의해야 합니다. 이렇게 하면 파일 작업이 완료되기를 기다리는 동안 서버가 차단되는 것을 방지할 수 있습니다.

4. 추가 데이터 전송 허용

파일 업로드와 함께 데이터를 전송해야 하는 경우 제공된 답변을 검토하여 안내를 받으세요.

5. 엔드포인트 차이점 이해

def와 async def 엔드포인트의 차이점과 파일 처리에 미치는 영향을 숙지하세요.

파일 업로드용 예제 코드

다음을 고려하세요. 예를 들어 코드 조각:

from fastapi import File, UploadFile

@app.post("/upload")
def upload(file: UploadFile = File(...)):
    try:
        contents = file.file.read()
        with open(file.filename, 'wb') as f:
            f.write(contents)
    except Exception:
        return {"message": "Error uploading file"}
    finally:
        file.file.close()

    return {"message": f"Successfully uploaded {file.filename}"}

이 코드는 파일 업로드를 처리하고 콘텐츠를 저장합니다. 업로드된 파일과 동일한 이름의 파일에 있습니다. 문제가 발생하면 제공된 리소스를 참조하여 추가 지원을 받으세요.

위 내용은 FastAPI 파일 업로드 변수가 항상 비어 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.