ホームページ > バックエンド開発 > Python チュートリアル > FastAPI ファイル アップロード変数が常に空なのはなぜですか?

FastAPI ファイル アップロード変数が常に空なのはなぜですか?

Susan Sarandon
リリース: 2024-12-08 08:20:10
オリジナル
547 人が閲覧しました

Why is my FastAPI file upload variable always empty?

FastAPI を使用してファイルをアップロードする方法?

背景

FastAPI は、クリーンで効率的な方法を提供する最新の高性能 Web フレームワークです。 API を構築します。ファイルのアップロードは、多くの Web アプリケーションで必要となる基本的な機能です。これを容易にするために、FastAPI はファイル アップロード処理用の複数のオプションを提供します。

問題

特定のシナリオでは、FastAPI ドキュメントに従ってファイルをアップロードすると、file2store 変数が常に空のままになります。この問題は、Python の UploadFile またはバイト アプローチを利用しようとしても解決しません。

解決策

この問題を解決するには、次の措置を講じることができます。

1. Python-Multipart のインストール

FastAPI はアップロードされたファイルを送信するためにフォーム データを使用します。 「python-multipart」をインストールすると、アップロードされたファイルが正しく処理されるようになります。

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

2.メモリに優しいファイル処理を使用する

FastAPI は、SpooledTemporaryFile オブジェクトを使用して、アップロードされたファイルをメモリに保存します。ファイル サイズが 1 MB を超える場合、ファイルはディスク上の一時ファイルに書き込まれます。大きなファイルの場合は、次のオプションを検討してください:

  • ファイルをチャンクで読み取る: ファイルを小さなチャンクに分割し、順次処理します。これによりメモリ消費量は削減されますが、処理時間が長くなる可能性があります。
  • shutil.copyfileobj(): この関数を使用してファイルの内容を管理可能なチャンクにコピーし、メモリ使用量を最小限に抑えます。

3.エンドポイントのブロックを避ける

ファイルのアップロードを処理するときは、エンドポイント関数を async def ではなく def で定義する必要があります。これにより、ファイル操作の完了を待機している間にサーバーがブロックされるのを防ぎます。

4.追加のデータ転送を許可する

ファイルのアップロードとともにデータを送信する必要がある場合は、提供されている回答を参考にしてください。

5.エンドポイントの違いを理解する

def エンドポイントと async def エンドポイントの違いと、それらがファイル処理に与える影響について理解します。

ファイル アップロードのコード例

次の点を考慮してください。コード スニペットの例:

from fastapi import File, UploadFile

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

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

このコードはファイルのアップロードを処理し、コンテンツを保存します。アップロードされたファイルと同じ名前のファイル。問題が発生した場合は、提供されているリソースを参照してサポートを受けてください。

以上がFastAPI ファイル アップロード変数が常に空なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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