Heim >Backend-Entwicklung >Python-Tutorial >Warum ist mein FastAPI-Datei-Upload immer leer und wie kann ich das beheben?

Warum ist mein FastAPI-Datei-Upload immer leer und wie kann ich das beheben?

Susan Sarandon
Susan SarandonOriginal
2024-12-09 06:53:06808Durchsuche

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

Wie lade ich eine Datei mit FastAPI hoch?

Problem:

Beim Versuch, eine Datei mit FastAPI hochzuladen, gemäß In der offiziellen Dokumentation ist die Variable file2store durchweg leer. Es kommt selten vor, dass Dateibytes erfolgreich abgerufen werden, aber das ist ungewöhnlich.

Lösung:

1. Installieren Sie Python-Multipart:

Um das Hochladen von Dateien zu ermöglichen, die als „Formulardaten“ übertragen werden, installieren Sie Python-Multipart, falls Sie dies noch nicht getan haben:

pip install python-multipart

2. Verwenden Sie das .file-Attribut für das Hochladen einer einzelnen Datei:

Verwenden Sie das .file-Attribut des UploadFile-Objekts, um die eigentliche Python-Datei (d. h. SpooledTemporaryFile) zu erhalten. Dadurch können Sie Methoden wie .read() und .close() aufrufen.

Beispiel:

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. Große Dateien verarbeiten:

Verwenden Sie Blöcke, wenn die Datei das Speicherlimit von 1 MB überschreitet. Passen Sie die Stückgröße nach Bedarf an.

4. Asynchrones Lesen/Schreiben:

Wenn Ihr Endpunkt eine asynchrone Definition erfordert, verwenden Sie asynchrone Methoden zum Lesen und Schreiben des Dateiinhalts.

5. Mehrere Dateien hochladen:

@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. Beispiel für ein HTML-Formular:

Ein Beispiel-HTML-Formular zum Hochladen von Dateien finden Sie unter dem bereitgestellten Link.

Das obige ist der detaillierte Inhalt vonWarum ist mein FastAPI-Datei-Upload immer leer und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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