Maison >développement back-end >Tutoriel Python >Comment résoudre les problèmes de téléchargement de fichiers vides dans FastAPI ?

Comment résoudre les problèmes de téléchargement de fichiers vides dans FastAPI ?

DDD
DDDoriginal
2024-12-20 14:48:10740parcourir

How to Solve Empty File Upload Issues in FastAPI?

Comment télécharger un fichier à l'aide de FastAPI ?

Problème :
Lorsque vous utilisez FastAPI pour télécharger un fichier selon à la documentation officielle, la variable file2store reste vide.

Cause :

  • Assurez-vous que python-multipart est installé.
  • Lors de l'utilisation de points de terminaison def, vous pouvez utiliser le fichier .file attribut pour accéder au fichier Python réel et appeler ses méthodes de manière synchrone.
  • Lorsque vous utilisez des points de terminaison de définition asynchrones, pensez opérations de fichiers asynchrones.
  • Ajustez la taille des morceaux en conséquence si les fichiers sont trop volumineux pour la mémoire.

Solution :

application. py :

from fastapi import File, UploadFile

@app.post("/create_file")
def create_file(file: UploadFile = File(...)):
    try:
        contents = file.file.read()
        # store contents to the database
    except Exception:
        return {"message": "Error uploading file"}
    finally:
        file.file.close()
    return {"message": f"Successfully uploaded {file.filename}"}

Alternative pour Async Points de terminaison :

@app.post("/create_file")
async def create_file(file: UploadFile = File(...)):
    try:
        contents = await file.read()
        # store contents to the database
    except Exception:
        return {"message": "Error uploading file"}
    finally:
        await file.close()
    return {"message": f"Successfully uploaded {file.filename}"}

Téléchargement de plusieurs fichiers :

from fastapi import File, UploadFile
from typing import List

@app.post("/upload")
def upload(files: List[UploadFile] = File(...)):
    for file in files:
        try:
            contents = file.file.read()
            # store contents to the database
        except Exception:
            return {"message": "Error uploading file(s)"}
        finally:
            file.file.close()
    return {"message": f"Successfully uploaded {[file.filename for file in files]}"}

Demande à partir d'un script Python :

requests.post(url="SERVER_URL/create_file", files={"file": (f.name, f, "multipart/form-data")})

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn