2012-07-05 84 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