Обнаружение и проверка типов MIME в ZF2

Я пытаюсь ограничить загрузку определенных типов файлов в Zend Framework 2 (хочу разрешить только файлы .png и .jpg), но у меня возникают некоторые проблемы с этим.

Он загружается, хотя я указываю только два типа MIME в валидаторах. Вот код

  $file = new File();
$form->setInputFilter($file->getInputFilter());

$captions = $request->getPost()->toArray();
$get_file = $this->params()->fromFiles('file');$data = array_merge_recursive($this->getRequest()->getPost()->toArray(), $this->getRequest()->getFiles()->toArray());

$form->setData($data);

if ($form->isValid()) {
$size = new Size(array('max' => FileHandler::FILESIZE));
$mime = new MimeType('image/jpg,image/png');

$adapter = (new Http())->setValidators(array($size, $mime), $get_file);

if (!$adapter->isValid()) {
$error_msg = $adapter->getMessages();
$error = array();

foreach ($error_msg as $key => $value) {
$error[] = $value;
}

$form->setMessages(array('file' => $error));

return $this->redirect()->toUrl('/admin/upload-failure');

Как видите, он установлен как валидатор для проверки размера и типа пантомимы.

Есть идеи по этому поводу?

1

Решение

Вы создаете MimeType валидатор неверен, передав неверный формат опции. Это должен быть массив с ключом mimeType. Проверьте доступные варианты Вот.

Вместо того, чтобы пытаться проверять ваши файлы, используя встроенный экземпляр Http, я рекомендую написать специальный класс InputFilter для этой работы. Zend Framework 2 имеет специальный Zend \ InputFilter \ FileInput что отличается от других, особенно в отношении потока проверки: средства проверки FileInput запускаются перед фильтрами. Он также автоматически вводит и использует Zend \ Validator \ Файл \ Загрузить валидатор, который также проверяет файлы на наличие возможных ошибок во время загрузки.

Вы можете легко использовать все эти встроенные функции, создав MyFileFilter класс, как показано ниже:

<?php
namespace Application\InputFilter;

use Zend\InputFilter\FileInput;
use Zend\InputFilter\InputFilter;
use Zend\Validator\File\Size;
use Zend\Validator\File\MimeType;

class MyFileFilter extends InputFilter
{
/**
* Constructor
*/
public function __construct($postFile)
{
$size = new Size(['max' => FileHandler::FILESIZE]);
$mime = new MimeType(['mimeType' => 'image/jpg,image/png']);

$input = new FileInput('file');
$input->setValue($postFile);
$input->getValidatorChain()
->attach($size)
->attach($mime);

$this->add($input);
}
}

Итак, в ваших контроллерах или сервисах вы можете сделать это:

$filter = new \Application\InputFilter\MyFileFilter($get_file);

if($filter->isValid()) {
// ...
}

Еще одна хорошая вещь об этом подходе — вы можете повторно использовать MyInputFilter для других требований к загрузке в вашем приложении, просто внеся некоторые незначительные улучшения. (Параметризация типов MIME, значения размера и т. Д.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]