我正在使用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。为什么呢?
答案 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',
));