Heim > Backend-Entwicklung > Python-Tutorial > Wie lade ich Dateien mithilfe von „form-data' effizient auf einen FastAPI-Server hoch?

Wie lade ich Dateien mithilfe von „form-data' effizient auf einen FastAPI-Server hoch?

Barbara Streisand
Freigeben: 2024-12-07 20:30:13
Original
466 Leute haben es durchsucht

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

Hochladen von Dateien mit FastAPI unter Verwendung von form-data und SpooledTemporaryFile

Um Dateien mit FastAPI mit multipart/form-data hochzuladen, wird die Installation empfohlen Python-Multipart, da Multipart-Dateien per gesendet werden form-data.

pip install python-multipart
Nach dem Login kopieren

Hier ist ein verbessertes Beispiel für das Hochladen einer Datei mit 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}"}
Nach dem Login kopieren

Wenn Sie größere Dateien in Blöcken verarbeiten müssen, sollten Sie die Datei in kleineren Schritten lesen . Sie können entweder eine manuelle Schleife verwenden:

@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}"}
Nach dem Login kopieren

Oder verwenden Sie die Methode „shutil.copyfileobj()“, die Daten in Blöcken liest und schreibt:

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}"}
Nach dem Login kopieren

Zusätzliche Hinweise :

  • FastAPI verwendet SpooledTemporaryFile für den Datei-Upload, der Daten im Speicher speichert. Bei Dateien, die größer als 1 MB sind, werden die Daten in eine temporäre Datei auf der Festplatte geschrieben.
  • Wenn Sie einen Endpunkt mit async def definieren, verwenden Sie die asynchrone Dateiverarbeitung, wie in dieser Antwort erwähnt: [https://stackoverflow.com/a/69868184/6616846](https://stackoverflow.com/a/69868184/6616846)
  • Zum Hochladen mehrerer Dateien können Sie eine Liste von UploadFile-Objekten in verwenden Ihre Endpunktfunktion.
  • Beispiele für HTML-Formulare finden Sie unter den im Original bereitgestellten Links Antwort.

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien mithilfe von „form-data' effizient auf einen FastAPI-Server hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage