Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Muat Turun Fail Selepas Menyiarkan Data dalam FastAPI?

Bagaimana untuk Muat Turun Fail Selepas Menyiarkan Data dalam FastAPI?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 11:03:01440semak imbas

How to Download a File After POSTing Data in FastAPI?

Cara Muat Turun Fail Selepas Menyiarkan Data dengan FastAPI

Masalah

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?

Kod FastAPI dan Contoh 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>

Penyelesaian

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:

  • Jika anda ingin memulangkan fail besar yang tidak sesuai dengan memori, gunakan StreamingResponse untuk memproses fail dalam ketulan.
  • Untuk mengalih keluar fail selepas ia dimuat turun, buat BackgroundTask untuk dijalankan selepas mengembalikan respons.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn