2012-07-05 112 views

回答

3

ATContentTypes registeres一个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.conf并设置max_file_size参数:

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

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

如果您有自定义的文件字段(以上仅适用于默认的原型ATFile架构),您可以重新使用该验证器或创建自己的。为了重复上面的验证,简单地把它添加到validators属性:

from Products.validation import V_REQUIRED 

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

要使用你独立配置不同的最大大小,使用ATContentTypes使用相同MaxSizeValidator,并以新的名称进行注册,然后使用验证程序而不是'checkFileMaxSize'验证程序;您指定的值是mebibytes(1024个字节)的数量:

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

validation.register(MaxSizeValidator('checkFileMax50mb', 50)) 
+0

为了防止资源浪费,如果您在nginx后面运行Plone,可以在将它传递给Plone之前立即检查请求的声明大小。请参阅 http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size 您可能也想要处理nginx中的错误: http://nginx.org/en/docs/http /ngx_http_core_module.html#error_page – 2012-07-11 12:52:08