Anda sedang mencipta apl web yang mengendalikan input teks, menukarnya kepada pertuturan, dan mengembalikan fail audio untuk dimuat turun. Anda memerlukan pilihan muat turun pada halaman HTML, tetapi anda tidak boleh melaksanakannya dengan betul.
Dalam Flask, persediaan yang serupa boleh dicapai menggunakan fungsi send_file. Bagaimanakah anda meniru fungsi ini dengan 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>
Pilihan 1: Gunakan Bentuk kata kunci untuk memastikan parameter yang diperlukan. Daripada menggunakan await request.form() dan menyemak parameter yang diperlukan secara manual, gunakan Form(...) untuk menjadikan parameter wajib. Selepas memproses data yang diterima, gunakan FileResponse untuk mengembalikan fail, menetapkan pengepala Pelupusan Kandungan kepada 'lampiran.'
Pilihan 2: Anda juga boleh menyokong permintaan GET dan POST untuk titik akhir /text2speech dengan menggunakan penghias seperti @app.api_route("/text2speech", method=["GET", "POST"]). Sebagai alternatif, anda boleh menentukan titik akhir yang berasingan dengan @app.get("/text2speech") dan @app.post("/text2speech").
Selain itu, anda boleh menyediakan antara muka JavaScript secara pilihan menggunakan API Ambil untuk memuat turun fail di bahagian hadapan.
Nota:
Atas ialah kandungan terperinci Bagaimana untuk Muat Turun Fail Selepas Menyiarkan Data dalam FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!