使用表单API在Drupal 7文件字段上验证文件扩展名和文件大小

时间:2013-08-13 18:40:16

标签: forms validation drupal drupal-7

我正在使用Drupal 7并拥有一个自定义模块,可以创建一个包含文件上传字段的表单:

$form['resume_file'] = array(
  '#type' => 'file',
  '#title' => t('Resume Upload'),      
);

我需要确保文件扩展名是以下之一:doc,docx,pdf,txt和rtf,文件大小不超过2MB

我没有在文档中找到明确的方法来实现这一目标。我看到有一个地方用过这个:

$form['resume_file'] = array(
  '#type' => 'file',
  '#title' => t('Resume Upload'),
  '#upload_validators'  => array("file_validate_extensions" => array("doc docx pdf txt rtf")),
);

但是,就阻止错误的文件类型和给出错误消息而言,这没有做任何事情。我是否需要在hook_form_validate()函数中做一些额外的事情?

我也看到了这个:

$form['resume_file'] = array(
  '#type' => 'file',
  '#title' => t('Resume Upload'),
);

$form['resume_file']['#upload_validators']['file_validate_extensions'][0] = 'doc docx pdf txt rtf'; 

哪个也没有做任何事情。如何验证文件大小和扩展名?

3 个答案:

答案 0 :(得分:4)

它应该实际工作。我们只需提及file_validate_extensions& file_validate_size下的upload_validators

示例:

'#upload_validators' => array(
    'file_validate_extensions' => array('gif png jpg jpeg'),
    'file_validate_size' => array(MAX_FILE_SIZE*1024*1024),
  ),

答案 1 :(得分:3)

drupal 7中表单api中的文件上传控件,带有扩展和大小验证

'resume'=>array(
  '#type'   => "managed_file",
  '#title'  => t("Upload Resume in Word Format"),
  '#descripion' => t("Only doc or docx format Files are allowed."),
  '#upload_location'    => "public://resume/",
  "#upload_validators"  => array("file_validate_extensions" => array("doc docx")),
  '#required'=>TRUE,

),

答案 2 :(得分:1)

#upload_validators是托管文件表单元素的非标准表单元素属性的一部分。

$element = array(
  '#type' => 'managed_file',
  '#title' => t('Resume Upload'),
  '#upload_validators' => array(
    'file_validate_extensions' => array('gif png jpg jpeg'),
    'file_validate_size' => array(MAX_FILE_SIZE*1024*1024),
  ),
);

有关托管文件元素类型的详细信息,请参阅Drupal Form API reference