在Symfony中设置Mime_type验证

时间:2009-03-27 08:30:37

标签: symfony1

我想确保在文件上传期间,只允许使用格式为jpeg,png和gif的文件。所以屏幕截图下面的“文件类型:”必须显示jpeg,png和gif:

http://lh5.ggpht.com/_SDci0Pf3tzU/ScynOZt_0qI/AAAAAAAAEo0/gMr_zxYofV4/s400/styleerror.png

我在Symfony中为验证器做了以下操作:

$this->setValidator ( 'upload your filehere',
     new sfValidatorFile ( array (
     'required'=>true,
     'mime_types' => array ('image/jpeg, image/png, image/gif' )
      ) ,
      array(

      'mime_types'=> 'only jpeg'
      )
      ) 
      );

但是当我点击上传按钮时,文件不会相应地过滤;我做错了什么?

我也试试

$this->setValidator ( 'upload your filehere',
     new sfValidatorFile ( array (
     'required'=>true,
     'mime_types' => 'image/jpeg, image/png, image/gif' 
      ) ,
      array(

      'mime_types'=> 'only jpeg'
      )
      ) 
      );

但它也不起作用。

我在我的表单类中尝试了以下操作,但遗憾的是它不能正常工作:

<?php

class UploadCaseForm extends sfForm {
    public function configure() {
        $this->setWidgets ( array ('Documents' => new sfWidgetFormInputFile ( ) ) );
        $this->widgetSchema->setNameFormat ( 'UploadCase[%s]' );


        $this->validatorSchema ['Documents'] = new sfValidatorFile ( 
        array ('mime_types' => 'web_images' ), 
        array ('invalid' => 'Invalid file.',
         'required' => 'Select a file to upload.', 
         'mime_types' => 'The file must be of JPEG, PNG or GIF format.' ) );

    }
}
?>

这是行动代码:

    public function executeIndex(sfWebRequest $request) {
        $this->form = new UploadCaseForm ( );

if ($this->getRequest ()->getMethod () == sfRequest::POST) {
        var_dump($request->getParameter('UploadCase'));


    }

}

编辑:就服务器端验证而言,接受的答案答案。如果有人想要客户端验证,即过滤即使在操作到达服务器之前可以上传的文件类型,那么也许there is no reliable way to do it, because of browser's constraint

2 个答案:

答案 0 :(得分:3)

您似乎错误地使用了API。 sfForm :: setValidator()的签名是here

但是,这是一种设置文件验证器的简单方法,只允许上传网络图像:

$this->validatorSchema['my_file'] = new sfValidatorFile(array(
    'mime_types' => 'web_images'
), array(
    'invalid'    => 'Invalid file.',
    'required'   => 'Select a file to upload.',
    'mime_types' => 'The file must be of JPEG, PNG or GIF format.'
));

'web_images'类别包括以下MIME类型:

image/jpeg
image/pjpeg
image/png
image/x-png
image/gif

如果要显式定义要接受的MIME类型,请将“web_images”替换为如下类型的数组:

'mime_types' => array(
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/x-png',
    'image/gif'
)

答案 1 :(得分:0)

有一种方法可以在浏览器中限制上传文件选择 缺点是它使用闪存来选择文件,并限制对安装了Flash播放器的用户的支持。闪存的优点是可以更好地控制上传(并行上传,进展,错误,允许选择的控制文件扩展等)。

我使用的组件是swfupload

编辑:这并不免除对上传文件进行服务器端控制,但结合使用它提供了类似的安全漏洞和更好的用户体验(错误可能在长时间运行的上传开始之前发生)