1

如何限制上传到 Archetypes FileField 的文件的大小?

4

1 回答 1

3

ATContentTypes 注册一个checkFileMaxSize验证器:

from Products.validation.config import validation
from Products.validation.validators.SupplValidators import MaxSizeValidator

validation.register(MaxSizeValidator('checkFileMaxSize',
                                     maxsize=zconf.ATFile.max_file_size))

zconf.ATFile.max_file_size默认为“无限制”,但您可以通过复制并设置参数Products/ATContentTypes/etc/atcontenttypes.conf.in来更改它:$INSTANCE_HOME/etc/atcontentypes.confmax_file_size

<archetype ATFile>
   # maximum file size in byte, kb or mb
   max_file_size 10mb
</archetype>

(格式gb也支持,但默认文件不包括在列表中)。

如果您有自定义文件字段(以上仅适用于默认的 Archetypes ATFile 架构),您可以重新使用该验证器或创建自己的验证器。要重用上述验证器,只需将其添加到validators属性中:

from Products.validation import V_REQUIRED

FileField('yourfilefield',
    # ...
    validators = (
        ('isNonEmptyFile', V_REQUIRED),
        ('checkFileMaxSize', V_REQUIRED)
    ),
)

要使用您独立配置的不同最大大小,请使用MaxSizeValidatorATContentTypes 使用的相同大小并以新名称注册它,然后使用该验证器而不是'checkFileMaxSize'验证器;您指定的值是字节数(1024 2个字节):

from Products.validation.config import validation
from Products.validation.validators.SupplValidators import MaxSizeValidator

validation.register(MaxSizeValidator('checkFileMax50mb', 50))
于 2012-07-05T16:12:46.690 回答