如何在FastAPI中實現檔案上傳和處理
FastAPI 是一個現代化的高效能Web框架,簡單易用且功能強大,它提供了原生支援檔案上傳和處理的功能。在本文中,我們將學習如何在FastAPI框架中實作檔案上傳和處理的功能,並提供程式碼範例來說明具體的實作步驟。
首先,我們需要匯入需要的函式庫和模組:
from fastapi import FastAPI, UploadFile, File from fastapi.responses import JSONResponse import shutil import os
接下來,我們需要建立一個FastAPI應用程式實例:
app = FastAPI()
現在,我們可以定義一個路由來接受檔案上傳請求,並將檔案儲存到伺服器上:
@app.post("/upload/") async def create_upload_file(file: UploadFile = File(...)): try: # 保存文件到服务器上 with open(file.filename, "wb") as buffer: shutil.copyfileobj(file.file, buffer) # 返回成功的响应 return JSONResponse({"message": "File uploaded successfully"}) except Exception as e: # 返回失败的响应 return JSONResponse({"error": str(e)}, status_code=500)
在上面的程式碼中,我們定義了一個POST
請求路由/upload/
,它接收一個名為file
的參數,該參數的類型是UploadFile
,我們使用File
函數將其作為請求體中的檔案進行解析。 File
函數的第一個參數是檔案類型的預設值,...
表示必須傳遞該參數,否則將會傳回錯誤回應。
在處理檔案上傳請求時,我們先使用with open
的方式建立一個檔案的寫入流,然後透過shutil.copyfileobj
函數將請求體中的文件物件複製到伺服器上。
當檔案上傳成功後,我們傳回一個包含成功訊息的JSON回應;如果檔案上傳過程中出現任何異常,我們將傳回一個包含錯誤訊息的JSON回應並設定回應狀態碼為500。
在檔案上傳功能已經實現後,我們可以繼續實作檔案處理功能。以下是一個範例路由,用於接受上傳的圖片文件,並將圖片檔案轉換為縮圖:
@app.post("/process_image/") async def process_image(file: UploadFile = File(...)): try: # 保存文件到服务器上 with open(file.filename, "wb") as buffer: shutil.copyfileobj(file.file, buffer) # 进行图片处理,生成缩略图 thumbnail_filename = f"thumbnail_{file.filename}" # 模拟图片处理过程 # 请根据实际需求进行实现 # ... # 返回缩略图的下载链接 return JSONResponse({"thumbnail_url": f"/download/{thumbnail_filename}"}) except Exception as e: # 返回失败的响应 return JSONResponse({"error": str(e)}, status_code=500)
在上面的範例程式碼中,我們使用了相同的文件上傳過程,然後進入圖片處理的邏輯。在這裡,我們使用模擬的方式來處理圖片文件,產生縮圖,並將縮圖的下載連結傳回給客戶端。
最後,我們也可以定義一個路由來提供下載功能:
@app.get("/download/{filename}") async def download_file(filename: str): try: # 返回文件下载链接 return JSONResponse({"download_url": f"/file/{filename}"}) except Exception as e: # 返回失败的响应 return JSONResponse({"error": str(e)}, status_code=500)
在上面的程式碼中,我們定義了一個GET
請求路由/download /{filename}
,該路由接受一個檔案名稱參數filename
,並傳回該檔案的下載連結。
到此,我們已經實現了在FastAPI框架中實現檔案上傳和處理的功能。透過上面的範例程式碼,我們可以了解到在FastAPI中處理檔案上傳和處理的基本流程,以及如何使用FastAPID的API和方法來實現這些功能。當然,具體的文件處理邏輯是可以根據實際需求進行自訂的。
希望這篇文章對你理解如何在FastAPI中實現檔案上傳和處理功能有所幫助!
以上是如何在FastAPI中實現檔案上傳和處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!