首頁 >後端開發 >Python教學 >為什麼我的 FastAPI 檔案上傳總是空的,如何修復?

為什麼我的 FastAPI 檔案上傳總是空的,如何修復?

Susan Sarandon
Susan Sarandon原創
2024-12-09 06:53:06807瀏覽

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 屬性進行單一檔案上傳:

使用UploadFile物件的 .file 屬性取得實際的 Python 檔案(即 SpooledTemporaryFile)。這允許您呼叫 .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.非同步讀取/寫入:

如果您的端點需要 async def,請使用非同步方法來讀取寫入檔案內容。

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