您正在创建一个处理文本输入的 Web 应用程序,将其转换为语音,并返回音频文件以供下载。您需要在 HTML 页面上提供下载选项,但无法正确实现它。
在 Flask 中,可以使用 send_file 函数实现类似的设置。如何使用 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>
选项 1: 使用表单关键字确保所需参数。使用 Form(...) 使参数成为强制参数,而不是使用 wait request.form() 并手动检查所需参数。处理接收到的数据后,使用 FileResponse 返回文件,将 Content-Disposition 标头设置为“附件”。
选项 2: 您还可以使用@app.api_route("/text2speech",methods=["GET", “邮政”])。或者,您可以使用 @app.get("/text2speech") 和 @app.post("/text2speech") 定义单独的端点。
此外,您可以选择使用 Fetch API 设置 JavaScript 接口来在前端下载文件。
注意:
以上是如何在 FastAPI 中发布数据后下载文件?的详细内容。更多信息请关注PHP中文网其他相关文章!