我一直在问这个问题很多recently。如何在上传之前检测视频的文件大小?
我创造了我上传表单
models.py
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
form.py
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 > 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"])
,并添加此行是settings.py
FILE_UPLOAD_MAX_MEMORY_SIZE = 157286400 # 157286400 bytes = 150 MB
我被告知要使用this snippet,我发现this snippet
但是有,我没有看到一个问题,一个djangosnippets用户说
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.
看到this question。这个问题是关于asp.net,我使用django,所以如何检测视频的文件大小,然后你上传它,在Django
“如果你确定允许人们使用所有带宽上传1GB 文件到你的服务器上,只要上传完成就删除它们, 确定它是一个很好的解决方案“ 的用户可以拥有1GB的数据发送POST请求,服务器将仍然收到这样的数据: '$卷曲-F [email protected]的http:// foo.com /' 我相信,大多数托管提供商不收取传入带宽费用。 – 2012-04-15 15:59:39