文件上传时的最大图片大小
image-processing
5
0

我的表单中有一个ImageField。我将如何实施文件大小的最小值/最大值,例如-

image = forms.ImageField(max_size = 2MB) 

要么

image = forms.ImageField(min_size = 100k)

谢谢。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

这是我在stackoverflow上遇到的这个问题的变体中所没有看到的另一个选项:在模型中使用自定义验证器。如果在forms.py中使用此技术和ModelForm,那么这应该是您所需要的。

models.py

from django.core.exceptions import ValidationError

class Product(models.Model):
    def validate_image(fieldfile_obj):
        filesize = fieldfile_obj.file.size
        megabyte_limit = 5.0
        if filesize > megabyte_limit*1024*1024:
            raise ValidationError("Max file size is %sMB" % str(megabyte_limit))

    image = models.ImageField(upload_to="/a/b/c/", validators=[validate_image])
收藏
评论

本质上,这是Django文件上传大小限制的重复项

您有两种选择:

  1. 在Django中使用验证来检查上传文件的大小。这种方法的问题在于,必须先完全上传文件,然后再进行验证。这意味着,如果有人上载了1TB的文件,则在用户收到表格错误之前,您可能会用完硬盘空间。

  2. 配置Web服务器以限制允许的上载正文大小。例如,如果使用Apache,则设置LimitRequestBody设置。这意味着如果用户尝试上传过多,他们将获得可在Apache中配置的错误页面

正如@pastylegs在评论中所说,将两者结合使用可能是最好的方法。假设您希望最大为5MB,也许在Web服务器级别上限制为20MB,在Django级别上限制为5MB。 20MB的限制将为恶意用户提供一定的保护,而Django中的5MB的限制提供了良好的用户体验。

收藏
评论

models.py

class Product(models.Model):
    image = models.ImageField(upload_to="/a/b/c/")

表格

class ProductForm(forms.ModelForm):
    # Add some custom validation to our image field
    def clean_image(self):
        image = self.cleaned_data.get('image', False)
        if image:
            if image._size > 4*1024*1024:
                raise ValidationError("Image file too large ( > 4mb )")
            return image
        else:
            raise ValidationError("Couldn't read uploaded image")
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号