Symfony 1.4无法使用sfWidgetInputFile和sfValidatorFile上传* .rar

时间:2014-06-12 12:56:56

标签: php file-upload symfony-1.4 mime-types

我正在使用sfValidatorFile和sfWidgetInputFile来支持用户上传文件,它允许文件类型:doc,docx,zip和rar。它没有问题,但Symfony引发文件错误* .rar:Invalid mime type (application/octet-stream).

这是我的验证器配置:

$this->validatorSchema['contract_file'] = new sfValidatorFile(array(
      'required'   => true,
      'path'       => sfConfig::get('sf_upload_dir').'/contracts',
      'mime_types' => array(
        'application/msword',
        'application/zip',
        'application/x-rar-compressed',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
       ),
       'max_size' => $maxSize
    ));

我不知道为什么Symfony在设置mime_types时会抛出此错误?如何修复上传* .rar?

更新

当清除mime_types配置时,Symfony允许上传文件* .rar但它重命名为* .bin。为什么呢?

1 个答案:

答案 0 :(得分:0)

如果你查看sfValidatedFile类,那里有一个函数可以将application/octet-stream mime类型的扩展名设置为.bin。您可以创建自己的类,扩展sfValidatedFile并覆盖所述文件。

配置sfValidatorFile时,您可以使用您自己班级的名称传递选项validated_file_class

这样的事情:

class myValidatedFile extends sfValidatedFile
{
    protected function getExtensionFromType($type, $default = '')
    {
        static $extensions = array(
            // ...
            'application/octet-stream' => '.rar',
            // ...  
        );

        return !$type ? $default : (isset($extensions[$type]) ? '.'.$extensions[$type] : $default);
    }
}

表格的configure功能:

 $this->validatorSchema['contract_file'] = new sfValidatorFile(array(
     // ...
     'validated_file_class' => 'myValidatedFile',
));