Установить проверку Mime_type в Symfony - PullRequest
0 голосов
/ 27 марта 2009

Я хочу убедиться, что во время загрузки файла разрешен только файл в формате 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'));


    }

}

Редактировать: Принятый ответ является ответом в отношении проверки на стороне сервера. Если кому-то нужна проверка на стороне клиента, т. Е. Фильтрация типа файла, который можно загрузить даже до того, как операция попадет на сервер, то, возможно, не существует надежного способа сделать это из-за ограничения браузера .

Ответы [ 2 ]

3 голосов
/ 27 марта 2009

Вы, похоже, неправильно используете API. Сигнатура sfForm :: setValidator () здесь .

Однако вот простой способ установить валидатор файла, который позволяет загружать только веб-изображения:

$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'
)
0 голосов
/ 04 мая 2010

Существует способ ограничения выбора файла при загрузке в браузере.
Недостатком является то, что он использует флэш-память для выбора файла и ограничивает поддержку пользователей, у которых установлен флэш-плеер. Преимущество заключается в том, что flash дает вам гораздо больший контроль над загрузкой (параллельная загрузка, прогрессия, ошибки, разрешено выбирать расширение контрольных файлов и т. Д.).

Компонент, который я использую для этого, swfupload

РЕДАКТИРОВАТЬ: это не освобождает от выполнения контроля над загруженными файлами на стороне сервера, но при использовании в комбинации предлагает аналогичный уровень безопасности и намного лучший пользовательский интерфейс (ошибки могут произойти до начала длительной загрузки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...