テキスト入力を処理し、それを次の形式に変換する 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:必須パラメータを確保するためのフォームキーワード。 await request.form() を使用して必須パラメーターを手動で確認する代わりに、Form(...) を使用してパラメーターを必須にします。受信したデータを処理した後、FileResponse を使用してファイルを返し、Content-Disposition ヘッダーを「attachment」に設定します。
オプション 2: @app.api_route("/text2speech",methods=["GET", "役職"])。あるいは、@app.get("/text2speech") と @app.post("/text2speech") を使用して個別のエンドポイントを定義することもできます。
さらに、オプションで Fetch API を使用して JavaScript インターフェイスを設定し、フロントエンドでファイルをダウンロードできます。
注:
以上がFastAPI でデータを POST した後にファイルをダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。