1

我正在尝试允许在我的文件上传中包含多种 mime 类型。我试过这样的事情:

$this->validatorSchema['filename'] = new sfValidatorFile(array(
  'required'        => false, 
  'path'            => sfConfig::get('sf_upload_dir'),
  'mime_categories' => array(
    'application' => array(
      'application/pdf'
    ),
    'web_images'  => array(
      'image/jpeg',
      'image/pjpeg',
      'image/png',
      'image/x-png',
      'image/gif',
    )
  ),
  'mime_types' => array('application', 'web_images')
));

我不想让所有类型的 mime 类型都包含在我的上传中,我也不想将类别/类型合并到一个数组中。有没有人遇到过这种情况或知道为什么会这样?

sfValidatorFile.class.php

$mimeTypes = is_array($this->getOption('mime_types')) ? $this->getOption('mime_types') : $this->getMimeTypesFromCategory($this->getOption('mime_types'));

它似乎正在接受数组,并且似乎我做得对。我在这里错过了什么吗?

4

2 回答 2

3

sfValidatorFile 文档说:

mime_types: Allowed mime types array or category (available categories: web_images)

(sfValidatorFile.php,第 27 行)。它允许 mime 类型数组或(一个)类别(不是类别数组)。这就是您的代码不起作用的原因。

于 2012-08-24T18:56:28.020 回答
0

你在错误的地方混合了很多东西。把事情简单化。您可以为所需的mime_types每个 mime_types 提供一个参数。

例如,在这里我接受所有类型的图像或 pdf:

$mime_types = array(
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/x-png',
    'image/gif',
    'application/pdf',
);

$this->validatorSchema['filename'] = new sfValidatorFile(array(
    'mime_types' => $mime_types
), array(
    'invalid'    => 'Invalid file.',
    'required'   => 'Select a file to upload.',
    'mime_types' => 'The file type is incorrect.'
));

编辑:

好吧,我知道你想要什么。你的代码几乎是正确的,但是关于mime_types检查是如何完成的,如果你给出一个数组,这意味着它是一个 mime_types 数组,而不是一个类别数组。如果您不提供数组,则表示它是一个 mime 类别。

这听起来像是 symfony 中的一个错误,但是你应该给出一个合并数组,然后将它传递给 mime_types 选项。

于 2012-08-24T11:00:13.000 回答