Djangoでファイルサイズの上限を設定する

会員制の動画投稿ウェブアプリを作る際にサーバーの負荷を考慮して動画ファイルが1G Bを超えると投稿できないようにすることができたのでその技術を共有する。

省略

  • 投稿機能の実装
  • アカウント作成方法
  • File形式の指定方法

環境

  • Django 3.1
  • python 3.7.3

ソースコード

models.pyに上限のfileサイズを設定する

from django.core.exceptions import ValidationError
def file_size(value):
    limit = 1000000000
    if value.size>limit:
        raise ValidationError('File too large. Size should not exceed 1GB.')

サイズはbite単位で決められているので1GBをbiteに変換する。

class Movie(models.Model):
    user = models.ForeignKey( settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    title = models.CharField(_('Title'),max_length=50,unique=True)
    video = models.FileField(upload_to='media/user/video',verbose_name='upload to moive ',
      validators=[FileExtensionValidator(allowed_extensions=['MOV','MPEG4','mp4', ]),file_size])
    def __str__(self):
        return self.title

設定した上限バイトをMovieModel に読み込ませる。ビデオの項目に画像を読み込んでもらっては困るので、’MOV’,’MPEG4′,’mp4′,以外はエラーを返す設定を行った。すでにmigrate しているのなら改めてmigrateしてなくても良い楽チンさがある。

デモプレイ

1GB以上の動画を選びUploadボタンを押すと以下のようになる

まとめ

def file_size(value):
    limit = 1000000000
    if value.size>limit:
        raise ValidationError('File too large. Size should not exceed 1GB.')

class Movie(models.Model):
    user = models.ForeignKey( settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    title = models.CharField(_('Title'),max_length=50,unique=True)
    video = models.FileField(upload_to='media/user/video',verbose_name='upload to moive ',
      validators=[FileExtensionValidator(allowed_extensions=['MOV','MPEG4','mp4', ]),file_size])
    def __str__(self):
        return self.title

いざ実装する際に色々調べてみたら意外と簡単にできて驚いた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA