ホームページ > バックエンド開発 > Python チュートリアル > 「form-data」を使用してファイルを FastAPI サーバーに効率的にアップロードするにはどうすればよいですか?

「form-data」を使用してファイルを FastAPI サーバーに効率的にアップロードするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-07 20:30:13
オリジナル
465 人が閲覧しました

How to Efficiently Upload Files to a FastAPI Server Using `form-data`?

form-data と SpooledTemporaryFile を使用した FastAPI でのファイルのアップロード

multipart/form-data で FastAPI を使用してファイルをアップロードするには、以下をインストールすることをお勧めしますマルチパート ファイルは python-multipart 経由で送信されます。 form-data.

pip install python-multipart
ログイン後にコピー

FastAPI を使用してファイルをアップロードする改善された例を次に示します。

from fastapi import File, UploadFile
from typing import List

@app.post("/upload")
def upload(file: UploadFile = File(...)):
    try:
        # Using file.file for synchronous operations (e.g., opening a file on disk)
        contents = file.file.read()
        with open(file.filename, 'wb') as f:
            f.write(contents)
    except Exception:
        return {"message": "An error occurred while uploading the file."}
    finally:
        file.file.close()

    return {"message": f"Successfully uploaded {file.filename}"}
ログイン後にコピー

大きなファイルをチャンクで処理する必要がある場合は、ファイルをより小さな増分で読み取ることを検討してください。 。手動ループを使用することもできます:

@app.post("/upload")
def upload(file: UploadFile = File(...)):
    try:
        with open(file.filename, 'wb') as f:
            while contents := file.file.read(1024 * 1024):
                f.write(contents)
    except Exception:
        return {"message": "An error occurred while uploading the file."}
    finally:
        file.file.close()

    return {"message": f"Successfully uploaded {file.filename}"}
ログイン後にコピー

または、データをチャンクで読み書きする shutil.copyfileobj() メソッドを使用することもできます:

from shutil import copyfileobj

@app.post("/upload")
def upload(file: UploadFile = File(...)):
    try:
        with open(file.filename, 'wb') as f:
            copyfileobj(file.file, f)
    except Exception:
        return {"message": "An error occurred while uploading the file."}
    finally:
        file.file.close()

    return {"message": f"Successfully uploaded {file.filename}"}
ログイン後にコピー

追加の注意事項:

  • FastAPI の使用ファイルアップロード用の SpooledTemporaryFile。データをメモリに保存します。 1MB を超えるファイルの場合、データはディスク上の一時ファイルに書き込まれます。
  • async def を使用してエンドポイントを定義する場合は、この回答で説明されているように非同期ファイル処理を使用します。 [https://stackoverflow.com/a/69868184/6616846](https://stackoverflow.com/a/69868184/6616846)
  • 複数のファイルをアップロードするには、次の UploadFile オブジェクトのリストを使用できます。
  • HTML フォームの例については、オリジナルで提供されているリンクを参照してください。答えてください。

以上が「form-data」を使用してファイルを FastAPI サーバーに効率的にアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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