您正在建立一個處理文字輸入的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中文網其他相關文章!