問題:
に従って 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 サイトの他の関連記事を参照してください。