Heim >Backend-Entwicklung >Python-Tutorial >Warum ist mein FastAPI-Datei-Upload immer leer und wie kann ich das beheben?
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!