如何在Silverstripe用户表单模块的FileFields中验证上传的文件大小


How to validate uploaded file size in FileFields in Silverstripe User Forms module

我们有一个Silverstripe网站,管理员可以使用userform模块创建在线表单。

为了允许通过表单上传文件,管理员在表单中添加一个"文件上传字段"。这会在表单中增加一个文件字段。

Filefield是UploadField的简化版本,它允许许多验证选项,包括最大上传文件大小。

Filefield是否存在这些选项?

我的问题是,我需要为后端CMS功能保持全局PHP upload_max_filesizepost_max_size的高值,但我想将前端Filefield上传限制在8meg。

如果文件超过了比PHP变量小的特定大小,是否可以验证userform模块中的Filefield,使其失败/显示消息?

看起来没有内置的功能。文档指出文件大小受到Web服务器[1]的限制。

然而,FileField使用Upload类的validate()函数,后者又使用Upload_Validator类的validate()函数[2],后者检查Config中的最大文件大小。

这意味着您可以在配置文件中添加以下内容以限制文件大小:

# Don't forget to flush afterwards :-)
Upload_Validator:
  default_max_file_size: '1m' # 1 megabyte

请注意,这是一个默认设置,这意味着它可能也会影响所有其他UploadField。但是,您可以对需要处理较大文件的其他UploadField设置限制。

[1]https://github.com/silverstripe/silverstripe-userforms/blob/master/docs/en/user-documentation.md#file-上传字段

[2]https://github.com/silverstripe/silverstripe-framework/blob/master/filesystem/Upload.php#L536