FastAPI でファイルのアップロードと処理を実装する方法

WBOY
リリース: 2023-07-28 15:01:07
オリジナル
4053 人が閲覧しました

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 関数を使用してリクエスト本文を配置します。 into ファイル オブジェクトがサーバーにコピーされます。

ファイルが正常にアップロードされると、成功メッセージを含む 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート