ホームページ > バックエンド開発 > Python チュートリアル > FastAPI ファイルのアップロードが常に空になるのはなぜですか?それを修正するにはどうすればよいですか?

FastAPI ファイルのアップロードが常に空になるのはなぜですか?それを修正するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-09 06:53:06
オリジナル
817 人が閲覧しました

Why is my FastAPI file upload always empty, and how can I fix it?

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

問題:

に従って FastAPI を使用してファイルをアップロードしようとすると、公式ドキュメントでは、file2store 変数は常に空です。ファイルバイトの取得が成功するケースはまれにありますが、これは一般的ではありません。

解決策:

1. Python-Multipart をインストールします:

「フォーム データ」として送信されるファイルのアップロードを有効にするには、Python-multipart をまだインストールしていない場合はインストールします:

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

2.単一ファイルのアップロードに .file 属性を使用する:

実際の Python ファイル (つまり、SpooledTemporaryFile) を取得するには、UploadFile オブジェクトの .file 属性を使用します。これにより、.read() や .close() などのメソッドを呼び出すことができます。

例:

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}"}
ログイン後にコピー

3.大きなファイルの処理:

ファイルが 1MB のメモリ制限を超える場合はチャンクを使用します。必要に応じてチャンク サイズを調整します。

4.非同期読み取り/書き込み:

エンドポイントで async def が必要な場合は、ファイルの内容の読み取りと書き込みに非同期メソッドを使用します。

5.複数のファイルをアップロードする:

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

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

6. HTML フォームの例:

ファイルをアップロードするための HTML フォームの例については、提供されているリンクを参照してください。

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

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