Symfony1 在Symfony中设置不适用于zip文件的mime_类型
在我的Symfony应用程序中,我想在文件上载期间将zip文件设置为mime类型之一,执行此操作的代码如下:Symfony1 在Symfony中设置不适用于zip文件的mime_类型,symfony1,mime-types,Symfony1,Mime Types,在我的Symfony应用程序中,我想在文件上载期间将zip文件设置为mime类型之一,执行此操作的代码如下: $this->validatorSchema ['Documents'] = new sfValidatorFile ( array ('mime_types' => array( 'application/zip', 'image/jpeg', 'image/pjpeg', 'image/png',
$this->validatorSchema ['Documents'] = new sfValidatorFile (
array ('mime_types' => array(
'application/zip',
'image/jpeg',
'image/pjpeg',
'image/png',
'image/x-png',
'image/gif',
'application/x-zip',
'application/octet-stream',
'application/pdf') ),
array ('invalid' => 'Invalid file.',
'required' => 'Select a file to upload.',
'mime_types' => 'The file must be of JPEG, PNG , GIF, pdf and zip format.' ) );
然而,当我上传时,我发现所有的pdf
,png
,gif
等都可以上传。唯一无法上载的mime类型是以.zip
结尾的文件
这里怎么了
我问了一个相关但不同的问题
注意:我使用的是Symfony 1.2.7
Edit:我用不同的浏览器做了一些进一步的测试。Firefox 3之所以能工作是因为“应用程序/八位字节流”,而IE之所以能工作是因为“应用程序/x-zip-compressed”,Google Chrome根本不起作用。做一个回音或错误日志,看看$Upload\u file->getMime()[或任何正确的方法调用]为您的zip文件返回了什么
如果获取的字符串是传递给数组的字符串之一,则SFValidator文件可能存在错误(我从未使用过它),您可能希望尝试使用yml验证器。这是mime类型检测的问题。SFValidator文件可以使用用户提供的函数来确定mime类型。所以,如果验证器确定的mime类型不正确,您可以编写自己的函数从上传的文件中检测zip文件 ,请看页面末尾解释文件上传的内容。之后,我相信在Symfony中 有一个解决方案:
class sfValidatorFileZip extends sfValidatorFile{
protected function configure($options = array(), $messages = array()){
if (!ini_get('file_uploads'))
{
throw new LogicException(sprintf('Unable to use a file validator as "file_uploads" is disabled in your php.ini file (%s)', get_cfg_var('cfg_file_path')));
}
$this->addOption('max_size');
$this->addOption('mime_types');
$this->addOption('mime_type_guessers', array(
array($this, 'guessFromFileinfo'),
array($this, 'guessFromMimeContentType'),
array($this, 'guessFromFileBinary'),
));
$this->addOption('mime_categories', array(
'web_images' => array(
'image/jpeg',
'image/pjpeg',
'image/png',
'image/x-png',
'image/gif',
),
'zip_file' => array(
'application/zip'
)
));
$this->addOption('validated_file_class', 'sfValidatedFile');
$this->addOption('path', null);
$this->addMessage('max_size', 'File is too large (maximum is %max_size% bytes).');
$this->addMessage('mime_types', 'Invalid mime type (%mime_type%).');
$this->addMessage('partial', 'The uploaded file was only partially uploaded.');
$this->addMessage('no_tmp_dir', 'Missing a temporary folder.');
$this->addMessage('cant_write', 'Failed to write file to disk.');
$this->addMessage('extension', 'File upload stopped by extension.');
}
}
'mime\u types'=>'zip\u file'
。例如:
$this->setValidator('filename', new sfValidatorFileZip(array(
'required' => false,
'mime_types' => 'zip_file',
'path' => sfConfig::get('sf_upload_dir') . '/files/',),
array('required' => 'filename is required.', 'mime_types' => 'only ZIP is accepted')));