>백엔드 개발 >파이썬 튜토리얼 >FastAPI 파일 업로드가 항상 비어 있는 이유는 무엇이며 어떻게 해결할 수 있습니까?

FastAPI 파일 업로드가 항상 비어 있는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-09 06:53:06808검색

Why is my FastAPI file upload always empty, and how can I fix it?

FastAPI를 사용하여 파일을 업로드하는 방법은 무엇입니까?

문제:

다음 지침에 따라 FastAPI를 사용하여 파일을 업로드하려고 할 때 공식 문서에 따르면 file2store 변수는 지속적으로 비어 있습니다. 파일 바이트 검색에 성공한 경우는 드물지만 이는 드문 경우입니다.

해결책:

1. Python-Multipart 설치:

"양식 데이터"로 전송되는 파일 업로드를 활성화하려면 python-multipart를 아직 설치하지 않은 경우 설치하십시오:

pip install python-multipart

2. 단일 파일 업로드에 .file 속성 사용:

실제 Python 파일(예: SpooledTemporaryFile)을 얻으려면 UploadFile 객체의 .file 속성을 사용하세요. 이를 통해 .read() 및 .close()와 같은 메소드를 호출할 수 있습니다.

예:

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}"}

3. 대용량 파일 처리:

파일이 1MB 메모리 제한을 초과하는 경우 청크를 사용합니다. 필요에 따라 청크 크기를 조정하세요.

4. 비동기 읽기/쓰기:

엔드포인트에 비동기 정의가 필요한 경우 파일 내용을 읽고 쓰는 데 비동기 방법을 사용하세요.

5. 여러 파일 업로드:

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

    return {"message": f"Successfully uploaded {[file.filename for file in files]}."}

6. HTML 양식 예:

파일을 업로드하기 위한 HTML 양식 예는 제공된 링크를 참조하세요.

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

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