2020/10/12

[Python3]SpooledTemporaryFileのサイズ(合計byte数)を取得する

pythonfastapi

実装内容

ファイルサイズ取得部分

SpooledTemporaryFileインスタンスをseek(0, 2)して、tell()するとbyte数を取得できました。

file: tempfile.SpooledTemporaryFile
file.seek(0, 2)  # seek to the end
file_size = file.tell()

応用例

これをFastAPIで、応用すると、合計アップロードファイル数のチェックができます。

from fastapi import APIRouter, status, HTTPException, UploadFile, File

router = APIRouter()
KB = 1024
MB = 1024 * KB

@router.put("/upload")
def upload(
        upload_file: UploadFile = File(None),
):
    upload_file.file.seek(0, 2)  # seek to the end
    file_size = upload_file.file.tell()
    if file_size > 200 * MB:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="アップロードファイルは200MB以内のものを選択してください",
        )
    return "OK"

以上です。