【问题标题】:How to control the size of the image a user can upload如何控制用户可以上传的图片大小
【发布时间】:2021-03-19 02:37:18
【问题描述】:

我有一个 Django 应用程序,用户可以在其中将图像上传到 S3 存储桶,我对几个用户进行了测试,发现许多人上传了非常大的照片(高达 55 MB),当我渲染主页时,所有必须显示图像。每次有人浏览它,都会耗尽我的带宽。

有没有办法限制人们上传的图片大小?也许每个 10 MB?

【问题讨论】:

  • 是的,您可以使用验证器。

标签: django amazon-web-services amazon-s3 django-models


【解决方案1】:

你可以这样做——也许在validators.py:

from django.core.exceptions import ValidationError


def validate_file_size(value):
    filesize = value.size
    
    if filesize > 10485760:  # 10 MiB in bytes
        raise ValidationError("The maximum file size that can be uploaded is 10 MiB")
    else:
        return value

然后在你的models.py:

from .validators import validate_file_size

file = models.FileField(..., validators=[validate_file_size])

但是,这是服务器端,而不是客户端。因此,文件的每次提交都会通过网络将文件传输给您,从而产生带宽费用。如果有人要上传 1 GiB 的文件,那么即使被服务器拒绝,上传也会消耗 1 GiB 的带宽。

客户端验证需要一些像 this 这样的 JS,但您还需要服务器端验证。

【讨论】:

  • 非常感谢,他们是否有一种方法来制作:如果文件大小> 10mb:将图像大小调整为10mb??问题不在于用户上传大照片,而是我每次渲染画廊时都会渲染这些照片,因为我没有为这种情况做准备,我没有添加“创建缩略图”功能,我没有现在知道如何添加它......对不起,我几个月前才开始编程,我的知识仍然非常基础
  • 您可以使用 Pillow like this,但您必须小心,因为如果有人上传非图像,它可能(可能!)将您暴露给任意代码执行漏洞。
  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多