首頁 > 後端開發 > Python教學 > 為什麼我的 FastAPI 檔案上傳變數始終為空?

為什麼我的 FastAPI 檔案上傳變數始終為空?

Susan Sarandon
發布: 2024-12-08 08:20:10
原創
532 人瀏覽過

Why is my FastAPI file upload variable always empty?

如何使用 FastAPI 上傳檔案?

背景

FastAPI 是一個現代化的高效能 Web 框架,提供了一種乾淨且有效率的方式來建構 API。文件上傳是許多 Web 應用程式所需的基本功能。為了實現這一點,FastAPI 提供了多種檔案上傳處理選項。

問題

在某些情況下,根據 FastAPI 文件上傳檔案時,file2store 變數始終保持為空。儘管嘗試利用 Python 的 UploadFile 或 bytes 方法,此問題仍然存在。

解決方案

可以採取以下措施來解決此問題:

1.安裝Python-Multipart

FastAPI 使用表單>FastAPI 使用表單資料傳輸上傳的檔案。安裝「python-multipart」可確保正確處理上傳的檔案。

pip install python-multipart
登入後複製

2.使用記憶體友善的檔案處理

FastAPI 使用 SpooledTemporaryFile 物件將上傳的檔案儲存在記憶體中。如果檔案大小超過 1 MB,則會將其寫入磁碟上的暫存檔案。對於大文件,請考慮以下選項:

  • 按區塊讀取文件: 將文件分成較小的區塊並按順序處理它們。這會減少記憶體消耗,但可能會延長處理時間。
  • 使用shutil.copyfileobj():利用此函數以可管理的區塊複製檔案內容,最大限度地減少記憶體使用。

3.避免阻塞端點

處理檔案上傳時,應使用 def 而非 async 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板