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
Freigeben: 2024-12-09 06:53:06
Original
867 Leute haben es durchsucht

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

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

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

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!

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