Maison >développement back-end >Tutoriel Python >Comment télécharger un fichier après avoir publié des données avec FastAPI ?

Comment télécharger un fichier après avoir publié des données avec FastAPI ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 10:04:30868parcourir

How to Download a File after POSTing Data with FastAPI?

Comment télécharger un fichier après avoir publié des données à l'aide de FastAPI ?

Lorsque vous travaillez avec FastAPI, le téléchargement d'un fichier après la publication de données consiste à utiliser le Classe FileResponse. Pour y parvenir :

  1. Définissez un point de terminaison de données de formulaire : Utilisez le mot-clé Form pour définir les données de formulaire attendues dans votre point de terminaison. Assurez-vous que les paramètres requis sont définis comme requis dans le formulaire(...).
  2. Traitez et générez une réponse : Après avoir traité les données reçues et généré le fichier, utilisez FileResponse pour renvoyer le fichier à l'utilisateur.
  3. Définir l'en-tête Content-Disposition : Pour lancer un téléchargement, définissez l'en-tête Content-Disposition dans FileResponse à l'aide du paramètre 'attachment'.
  4. Renvoyer la FileResponse :Renvoyer la FileResponse au client, en vous assurant que les en-têtes sont corrects pour déclencher le téléchargement du fichier.

Voici un exemple :

<code class="python">@app.post("/download")
async def download_file(request: Request):
    if request.method == "POST":
        form = await request.form()
        if form["message"] and form["language"]:
            # Process the data and generate the file here
            file_path = "path/to/file.mp3"
            headers = {"Content-Disposition": f"attachment; filename=downloaded_file.mp3"}
            return FileResponse(file_path, headers=headers, media_type="audio/mp3")</code>

N'oubliez pas que si vous souhaitez que le point de terminaison gère à la fois les requêtes GET et POST, utilisez soit @app.api_route() avec méthodes=["GET", "POST"] ou définissez des points de terminaison séparés avec @app.post() et @app. get().

De plus, si vous prévoyez de télécharger plusieurs fichiers ou si vous avez besoin de plus de flexibilité, envisagez d'utiliser d'autres concepts tels que :

  • StreamingResponse : Pour traiter fichiers volumineux en morceaux, utilisez StreamingResponse au lieu de FileResponse.
  • API JavaScript et Fetch : Dans le frontend, utilisez JavaScript et l'API Fetch pour lancer le processus de téléchargement de fichiers.
  • Magasins de valeurs-clés/base de données : Pour gérer plusieurs utilisateurs et fichiers simultanément, envisagez d'utiliser un magasin de valeurs-clés ou une base de données pour mapper les chemins de fichiers à des identifiants uniques.

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