環境
- fastapi
- python3.9
全体のソース
sample.py
from fastapi import UploadFile
from pydantic import BaseModel, validator
from sample_app.domain.models.valueobjects.exceptions import InvalidRequestException
IMG_MAX_SIZE = 2 * 1024 * 1024
class UploadImage(BaseModel):
upload_image: UploadFile
@validator("upload_image")
def validate_upload_image(cls, v: UploadFile) -> UploadFile:
v.file.seek(0, 2)
img_size = v.file.tell()
if img_size > IMG_MAX_SIZE:
# 任意で作成した例外
raise InvalidRequestException("2MB以上の画像はアップロードできません")
return v
解説
sample.py
v.file.seek(0, 2)
img_size = v.file.tell()
v.file.seek(0, 2)
で取得したファイルオブジェクト(v.file
)のファイルの参照位置を取得しています。
(0, 2)
で最初から最後までの位置を取得しています
v.file.tell()
では、ファイルの最初から最後までのバイト数を返しているので画像サイズとして取得しています