title: How to detect the file size of a video before you upload it?
body: <p>I have been asking questions about this subject a lot <a href="https://stackoverflow.com/questions/9960099/how-to-configure-django-uploadify-for-videos-upload-only">recently</a>.</p>
  
  <p>i created my upload form</p>
  
  <p><strong>models.py</strong></p>
  
  <pre><code>from django.db import models
  from app.extra import ContentTypeRestrictedFileField
  
  class upload(models.Model):
      """ upload """
      name = models.CharField(max_length=100)
      description = models.CharField(max_length=250)
      file = ContentTypeRestrictedFileField(
          upload_to='/media/videos,'
          content_types=['video/avi', 'video/mp4', 'video/3gp', 'video/wmp', 'video/flv', 'video/mov'],
          max_upload_size=104857600
      )
      created = models.DateTimeField('created', auto_now_add=True)
      modified = models.DateTimeField('modified', auto_now=True)
  
      def __unicode__(self):
          return self.name
  </code></pre>
  
  <p><strong>form.py</strong></p>
  
  <pre><code>from django.db.models import FileField
  from django.forms import forms
  from django.template.defaultfilters import filesizeformat
  from django.utils.translation import ugettext_lazy as _
  
  class ContentTypeRestrictedFileField(FileField):
      """
      Same as FileField, but you can specify:
          * content_types - list containing allowed content_types. Example: ['application/pdf', 'image/jpeg']
          * max_upload_size - a number indicating the maximum file size allowed for upload.
              2.5MB - 2621440
              5MB - 5242880
              10MB - 10485760
              20MB - 20971520
              50MB - 5242880
              100MB 104857600
              250MB - 214958080
              500MB - 429916160
      """
      def __init__(self, content_types=None,max_upload_size=104857600, **kwargs):
          self.content_types = kwargs.pop('video/avi', 'video/mp4', 'video/3gp', 'video/wmp', 'video/flv', 'video/mov')
          self.max_upload_size = max_upload_size
  
          super(ContentTypeRestrictedFileField, self).__init__(**kwargs)
  
  
      def clean(self, *args, **kwargs):        
          data = super(ContentTypeRestrictedFileField, self).clean(*args, **kwargs)
  
          file = data.file
          try:
              content_type = file.content_type
              if content_type in self.content_types:
                  if file._size &gt; self.max_upload_size:
                      raise forms.ValidationError(_('Please keep filesize under %s. Current filesize %s') % (filesizeformat(self.max_upload_size), filesizeformat(file._size)))
              else:
                  raise forms.ValidationError(_('Filetype not supported.'))
          except AttributeError:
              pass        
  
          return data
  
          from south.modelsinspector import add_introspection_rules
          add_introspection_rules([], ["^app\.extra\.ContentTypeRestrictedFileField"])
  </code></pre>
  
  <p>and add this line is <strong>settings.py</strong></p>
  
  <pre><code>FILE_UPLOAD_MAX_MEMORY_SIZE = 157286400 # 157286400 bytes = 150 MB
  </code></pre>
  
  <p>i was told to use <a href="http://djangosnippets.org/snippets/977/" rel="nofollow noreferrer">this snippet</a>, and i found <a href="http://djangosnippets.org/snippets/2206/" rel="nofollow noreferrer">this snippet</a></p>
  
  <p>But there's an issue that i didn't see, a djangosnippets user say</p>
  
  <pre><code>If you're ok with letting people use up all your bandwidth for uploading 1GB 
  files to your servers just to delete them as soon as the upload finishes, 
  sure it's a great solution.
  </code></pre>
  
  <p>see <a href="https://stackoverflow.com/questions/674651/uploading-files-past-asp-net-request-length-limit/679427#679427">this question</a>. That question is about asp.net, i use django, So how to detect the file size of a video before that you upload it, in django</p>