1
0

More than 1 year has passed since last update.

【Python3.9 / FastAPI】アップロードされた画像容量を取得して、バリデーションをかける方法

Last updated at Posted at 2022-08-12

環境

  • 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()では、ファイルの最初から最後までのバイト数を返しているので画像サイズとして取得しています

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0