開發需要接收使用者輸入、處理使用者輸入然後提供檔案下載的Web 應用程式時,能夠適當促進這種交流至關重要。 FastAPI 為建立此類應用程式提供了一個強大的框架,本指南將探討如何在處理 POSTed 資料後有效下載檔案。
首先,在 FastAPI 應用程式中定義一個端點處理檔案下載請求。該端點將接收檔案路徑並傳回檔案作為回應。使用 FastAPI FileResponse 類別的範例實作:
<code class="python">from fastapi import FastAPI, FileResponse, Request from fastapi.responses import FileResponse app = FastAPI() @app.post('/download-file') async def download_file(request: Request, user_id: int = Form(...)): file_path = 'path/to/file.mp3' return FileResponse(file_path, media_type='audio/mp3', filename='output.mp3')</code>
在此程式碼中,file_path 變數應替換為需要下載的檔案的實際路徑。 media_type 和 filename 參數指定檔案類型以及下載檔案的名稱。
定義端點後,將HTML 表單合併到您的前端中觸發對/download-file 端點的POST 請求並提供必要的user_id 參數:
<code class="html"><form action="/download-file" method="post"> <input type="text" name="user_id" placeholder="Enter user ID"> <input type="submit" value="Download File"> </form></code>
提交表單時,具有指定user_id 的POST 請求將發送至/download-file 端點,該端點將處理該請求並傳回檔案以供下載。
如果檔案下載的檔案特別大,可以考慮使用FastAPI中的StreamingResponse類別:
<code class="python">from fastapi import FastAPI, Response, StreamingResponse @app.post('/stream-large-file') async def download_large_file(request: Request, user_id: int = Form(...)): file_path = 'path/to/large_file.mp3' async def iter_file(): with open(file_path, 'rb') as f: while chunk := f.read(1024): yield chunk return StreamingResponse(iter_file(), media_type='audio/mp3', filename='output.mp3')</code>
這裡,iter_file函數分塊讀取文件以減少記憶體消耗並促進文件的串流。
按照上述步驟,您可以創建 FastAPI 應用程序,在 POST 操作後無縫處理文件下載。這使您的應用程式能夠提供下載功能,豐富用戶體驗並更輕鬆地存取生成的檔案。
以上是如何使用 FastAPI 發布資料後下載檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!