Problème :
Lors de la tentative de téléchargement d'un fichier à l'aide de FastAPI selon les documentation officielle, la variable file2store est systématiquement vide. De rares cas de récupération réussie d'octets de fichiers se produisent, mais cela est rare.
Solution :
1. Installez Python-Multipart :
Pour activer le téléchargement de fichiers, qui sont transmis sous forme de « données de formulaire », installez python-multipart si vous ne l'avez pas déjà fait :
pip install python-multipart
2. Utilisez l'attribut .file pour le téléchargement d'un seul fichier :
Utilisez l'attribut .file de l'objet UploadFile pour obtenir le fichier Python réel (c'est-à-dire SpooledTemporaryFile). Cela vous permet d'appeler des méthodes comme .read() et .close().
Exemple :
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. Gérer les fichiers volumineux :
Utilisez des morceaux si le fichier dépasse la limite de mémoire de 1 Mo. Ajustez la taille du morceau si nécessaire.
4. Lecture/écriture asynchrone :
Si votre point de terminaison nécessite une définition asynchrone, utilisez des méthodes asynchrones pour lire et écrire le contenu du fichier.
5. Télécharger plusieurs fichiers :
@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. Exemple de formulaire HTML :
Référez-vous au lien fourni pour un exemple de formulaire HTML pour télécharger des fichiers.
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!