Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Cekap Muat Naik Fail ke Pelayan FastAPI Menggunakan `form-data`?

Bagaimana untuk Cekap Muat Naik Fail ke Pelayan FastAPI Menggunakan `form-data`?

Barbara Streisand
Barbara Streisandasal
2024-12-07 20:30:13474semak imbas

How to Efficiently Upload Files to a FastAPI Server Using `form-data`?

Memuat Naik Fail dengan FastAPI Menggunakan form-data dan SpooledTemporaryFile

Untuk memuat naik fail menggunakan FastAPI dengan multipart/form-data, adalah disyorkan untuk memasang python-multipart sebagai fail berbilang bahagian dihantar melalui form-data.

pip install python-multipart

Berikut ialah contoh yang dipertingkatkan untuk memuat naik fail menggunakan FastAPI:

from fastapi import File, UploadFile
from typing import List

@app.post("/upload")
def upload(file: UploadFile = File(...)):
    try:
        # Using file.file for synchronous operations (e.g., opening a file on disk)
        contents = file.file.read()
        with open(file.filename, 'wb') as f:
            f.write(contents)
    except Exception:
        return {"message": "An error occurred while uploading the file."}
    finally:
        file.file.close()

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

Jika anda perlu memproses fail yang lebih besar dalam ketulan, pertimbangkan untuk membaca fail dalam penambahan yang lebih kecil . Anda boleh sama ada menggunakan gelung manual:

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

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

Atau, gunakan kaedah shutil.copyfileobj(), yang membaca dan menulis data dalam ketulan:

from shutil import copyfileobj

@app.post("/upload")
def upload(file: UploadFile = File(...)):
    try:
        with open(file.filename, 'wb') as f:
            copyfileobj(file.file, f)
    except Exception:
        return {"message": "An error occurred while uploading the file."}
    finally:
        file.file.close()

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

Nota Tambahan :

  • FastAPI menggunakan SpooledTemporaryFile untuk fail muat naik, yang menyimpan data dalam ingatan. Untuk fail yang lebih besar daripada 1MB, data ditulis pada fail sementara pada cakera.
  • Jika mentakrifkan titik akhir dengan async def, gunakan pemprosesan fail tak segerak seperti yang dinyatakan dalam jawapan ini: [https://stackoverflow.com/a/69868184/6616846](https://stackoverflow.com/a/69868184/6616846)
  • Untuk memuat naik berbilang fail, anda boleh menggunakan senarai objek UploadFile dalam fungsi titik akhir anda.
  • Untuk contoh borang HTML, rujuk pautan yang disediakan dalam jawapan asal.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Muat Naik Fail ke Pelayan FastAPI Menggunakan `form-data`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn