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