Bagaimana untuk Muat Turun Fail selepas Menyiarkan Data Menggunakan FastAPI?

Barbara Streisand
Lepaskan: 2024-10-31 20:25:17
asal
1004 orang telah melayarinya

How to Download a File after POSTing Data Using FastAPI?

Bagaimana untuk Muat Turun Fail selepas Menyiarkan Data menggunakan FastAPI?

Apabila bekerja dengan FastAPI dan pengendalian fail, satu tugas biasa adalah untuk membolehkan pengguna memuat turun fail selepas menyerahkan data melalui permintaan POST. Ini boleh dicapai dengan menggunakan kelas FileResponse dan memastikan konfigurasi pengepala dan jenis kandungan yang betul.

Dalam kod yang disediakan di bawah, kami akan menunjukkan cara menyediakan titik akhir POST yang memproses data dan mengembalikan audio fail (MP3) untuk dimuat turun. Kami akan menggunakan jenis data Borang untuk menangkap input pengguna dan menjana fail audio.

Pilihan 1: Menggunakan Titik Akhir Muat Turun Berasingan

Dalam pendekatan ini, kami akan mencipta titik akhir yang berasingan untuk mengendalikan muat turun fail.

<code class="python">from fastapi import FastAPI, Request, Form, File, UploadFile
from fastapi.responses import FileResponse, HTMLResponse
from fastapi.templating import Jinja2Templates
from gtts import gTTS

app = FastAPI()
templates = Jinja2Templates(directory="templates")


def text_to_speech(language: str, text: str) -> str:
    tts = gTTS(text=text, lang=language, slow=False)
    filepath = "temp/welcome.mp3"
    tts.save(filepath)
    return f"Text to speech conversion successful to {filepath}"


@app.get("/")
def home(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})


@app.post("/text2speech")
def text2speech(request: Request, message: str = Form(...), language: str = Form(...)):
    if message and language:
        output = text_to_speech(language, message)
    path = "temp/welcome.mp3"
    filename = os.path.basename(path)
    headers = {"Content-Disposition": f"attachment; filename={filename}"}
    return FileResponse(path, headers=headers, media_type="audio/mp3")</code>
Salin selepas log masuk

Titik akhir GET berfungsi sebagai halaman utama, manakala titik akhir POST mengendalikan input pengguna dan menjana fail audio. FileResponse menguruskan menetapkan pengepala yang sesuai untuk muat turun fail.

Dalam templat anda, anda boleh menambah pautan untuk mencetuskan muat turun fail:

<code class="html"><!DOCTYPE html>
<html>
  <head>
    <title>Download File</title>
  </head>
  <body>
    <a href="{{ url_for('text2speech') }}">Download File</a>
  </body>
</html></code>
Salin selepas log masuk

Pilihan 2: Fail In-Endpoint Muat turun

Sebagai alternatif, anda boleh mengendalikan muat turun fail dalam titik akhir yang sama yang memproses data:

<code class="python">from fastapi import FastAPI, Request, Form

app = FastAPI()


def text_to_speech(language: str, text: str) -> str:
    tts = gTTS(text=text, lang=language, slow=False)
    filepath = "temp/welcome.mp3"
    tts.save(filepath)
    return f"Text to speech conversion successful to {filepath}"


@app.post("/text2speech")
def text2speech(request: Request, message: str = Form(...), language: str = Form(...)):
    output = text_to_speech(language, message)
    return {"filepath": filepath}</code>
Salin selepas log masuk

Dalam templat anda, anda boleh menggunakan JavaScript untuk mencetuskan muat turun fail menggunakan laluan fail yang dikembalikan daripada titik akhir:

<code class="html"><script>
  const filepath = "{{ filepath }}";
  window.location.href = filepath;
</script></code>
Salin selepas log masuk

Mengendalikan Fail Besar

Untuk fail yang melebihi had memori, anda boleh menggunakan StreamingResponse:

<code class="python">from fastapi.responses import StreamingResponse

@app.post("/text2speech")
def text2speech(request: Request, message: str = Form(...), language: str = Form(...)):
    ...
    def iterfile():
        with open(filepath, "rb") as f:
            yield from f

    headers = {"Content-Disposition": f"attachment; filename={filename}"}
    return StreamingResponse(iterfile(), headers=headers, media_type="audio/mp3")</code>
Salin selepas log masuk

Memadam Fail Selepas Muat Turun

Untuk mengelakkan pengumpulan ruang cakera, adalah amalan yang baik untuk memadam fail selepas ia dimuat turun. Menggunakan BackgroundTasks, anda boleh menjadualkan pemadaman fail sebagai tugas latar belakang:

<code class="python">from fastapi import BackgroundTasks

@app.post("/text2speech")
def text2speech(request: Request, background_tasks: BackgroundTasks, ...):
    ...
    background_tasks.add_task(os.remove, path=filepath)
    return FileResponse(filepath, headers=headers, media_type="audio/mp3")</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Muat Turun Fail selepas Menyiarkan Data Menggunakan FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!