ホームページ > バックエンド開発 > Python チュートリアル > FastAPI でデータを POST した後にファイルをダウンロードするにはどうすればよいですか?

FastAPI でデータを POST した後にファイルをダウンロードするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-31 11:03:01
オリジナル
505 人が閲覧しました

How to Download a File After POSTing Data in FastAPI?

FastAPI でデータを POST した後にファイルをダウンロードする方法

問題

テキスト入力を処理し、それを次の形式に変換する Web アプリを作成しています。音声ファイルをダウンロードして返します。 HTML ページにダウンロード オプションが必要ですが、それを適切に実装できません。

Flask では、send_file 関数を使用して同様の設定を実現できます。この機能を FastAPI でどのように複製しますか?

FastAPI コードと HTML の例

<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 インターフェイスを設定し、フロントエンドでファイルをダウンロードできます。

注:

  • メモリに収まらない大きなファイルを返したい場合は、StreamingResponse を使用してファイルを分割して処理します。
  • ダウンロード後にファイルを削除するには、応答を返した後に実行される BackgroundTask を作成します。

以上がFastAPI でデータを POST した後にファイルをダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート