Téléchargement de fichiers avec FastAPI à l'aide de données de formulaire et SpooledTemporaryFile
Pour télécharger des fichiers à l'aide de FastAPI avec multipart/form-data, il est recommandé d'installer python-multipart car les fichiers en plusieurs parties sont envoyés via form-data.
pip install python-multipart
Voici un exemple amélioré de téléchargement d'un fichier à l'aide de 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}"}
Si vous devez traiter des fichiers plus volumineux par morceaux, envisagez de lire le fichier par incréments plus petits. . Vous pouvez soit utiliser une boucle manuelle :
@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}"}
Ou utiliser la méthode shutdown.copyfileobj(), qui lit et écrit les données en morceaux :
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}"}
Notes supplémentaires :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!