Vous créez une application Web qui gère la saisie de texte et la convertit en discours et renvoie un fichier audio à télécharger. Vous avez besoin d'une option de téléchargement sur la page HTML, mais vous ne pouvez pas l'implémenter correctement.
Dans Flask, une configuration similaire pourrait être réalisée en utilisant la fonction send_file. Comment répliquer cette fonctionnalité avec FastAPI ?
<code class="python">from fastapi import FastAPI, File, Form, UploadFile from fastapi.responses import FileResponse, HTMLResponse from fastapi.templating import Jinja2Templates from gtts import gTTS templates = Jinja2Templates(directory="templates") def text_to_speech(language: str, text: str) -> str: tts = gTTS(text=text, lang=language, slow=False) tts.save("./temp/welcome.mp3") return "Text to speech conversion successful" @app.get("/") def home(request: Request): return templates.TemplateResponse("index.html", {"request": request}) @app.post("/text2speech") async def home(request: Request): if request.method == "POST": form = await request.form() if form["message"] and form["language"]: language = form["language"] text = form["message"] translate = text_to_speech(language, text) path = "./temp/welcome.mp3" value = FileResponse("./temp/welcome.mp3", media_type="audio/mp3") return value</code>
<code class="html"><!doctype html> <title>Download MP3 File</title> <h2>Download a file</h2> <p><a href="{{ url_for('text2speech') }}">Download</a></p></code>
Option 1 : Utilisez le Mot-clé de formulaire pour garantir les paramètres requis. Au lieu d'utiliser wait request.form() et de vérifier manuellement les paramètres requis, utilisez Form(...) pour rendre les paramètres obligatoires. Après avoir traité les données reçues, utilisez FileResponse pour renvoyer le fichier, en définissant l'en-tête Content-Disposition sur « pièce jointe ».
Option 2 : Vous pouvez également prendre en charge les requêtes GET et POST pour le point de terminaison /text2speech en utilisant des décorateurs comme @app.api_route("/text2speech", METHODS=["GET", "POSTE"]). Vous pouvez également définir des points de terminaison distincts avec @app.get("/text2speech") et @app.post("/text2speech").
De plus, vous pouvez éventuellement configurer une interface JavaScript à l'aide de l'API Fetch pour télécharger le fichier dans le frontend.
Remarque :
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!