Валидация PDF файлов

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

Валидация PDF файлов

Сообщение Chelobaka »

Здравствуйте, возникла проблема с валидацией файлов с мультизагрузкой.
Следовал инструкции: https://yiiframework.com.ua/ru/doc/guid ... le-upload/.

Код: Выделить всё

class DocumentForm extends Model 
{
    public $files = [];

    public function rules()
    {
        return [
            [['files'], 'file', 'skipOnEmpty' => true, 'extensions' => ['pdf'], 'maxFiles' => 3],
        ];
    }
}
Перед загрузкой данных делаю так:

Код: Выделить всё

$form = = new DocumentForm();
$form->files = UploadedFile::getInstances($form, 'files');
$form->validate();
В итоге такое:

Код: Выделить всё


frontend\models\forms\DocumentForm Object
(
    [files] => Array
        (
            [0] => yii\web\UploadedFile Object
                (
                    [name] => pj5LgR3QeVwammYfGa_-s6QEwEEp8iq5.pdf
                    [tempName] => /tmp/phpqElyOZ
                    [type] => application/pdf
                    [size] => 103489
                    [error] => 0
                )

            [1] => yii\web\UploadedFile Object
                (
                    [name] => sample.pdf
                    [tempName] => /tmp/phpIuNN7p
                    [type] => application/pdf
                    [size] => 3028
                    [error] => 0
                )

        )

    [_errors:yii\base\Model:private] => 
    [_validators:yii\base\Model:private] => 
    [_scenario:yii\base\Model:private] => default
    [_events:yii\base\Component:private] => Array
        (
        )

    [_eventWildcards:yii\base\Component:private] => Array
        (
        )

    [_behaviors:yii\base\Component:private] => 
)
// Вывод через $form->getErrors();
(
    [files] => Array
        (
            [0] => Разрешена загрузка файлов только со следующими расширениями: pdf.
        )

)

Если загружать 1 файл то валидация проходит.

Код: Выделить всё

frontend\models\forms\DocumentForm Object
(
    [files] => Array
        (
            [0] => yii\web\UploadedFile Object
                (
                    [name] => pj5LgR3QeVwammYfGa_-s6QEwEEp8iq5.pdf
                    [tempName] => /tmp/phpqElyOZ
                    [type] => application/pdf
                    [size] => 103489
                    [error] => 0
                )
        )

    [_errors:yii\base\Model:private] => 
    [_validators:yii\base\Model:private] => 
    [_scenario:yii\base\Model:private] => default
    [_events:yii\base\Component:private] => Array
        (
        )

    [_eventWildcards:yii\base\Component:private] => Array
        (
        )

    [_behaviors:yii\base\Component:private] => 
)
// Это ОК

Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

Re: Валидация PDF файлов

Сообщение Chelobaka »

Если убрать строчку 'extensions' => 'pdf', То всё начинает работать. Возможно какая то ошибка в указании расширения?
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Валидация PDF файлов

Сообщение yiiliveext »

С кодировками может быть проблема. Поотдельности оба файла загружаются?
Если два грузите, то на который ругается? (в валидаторе поставьте 'wrongExtension' => 'File: {file}. Allowed extension: {extensions}')
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

Re: Валидация PDF файлов

Сообщение Chelobaka »

yiiliveext писал(а): 2019.10.10, 15:50 С кодировками может быть проблема. Поотдельности оба файла загружаются?
Если два грузите, то на который ругается? (в валидаторе поставьте 'wrongExtension' => 'File: {file}. Allowed extension: {extensions}')
Таки да. Похоже что проблема в кодировке. Ошибку выдает конкретный файл.
Как бы вы посоветовали созадавать pdf из pdf stream? Сейчас это делаю через file_put_contents
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Валидация PDF файлов

Сообщение yiiliveext »

Chelobaka писал(а): 2019.10.10, 16:26
yiiliveext писал(а): 2019.10.10, 15:50 С кодировками может быть проблема. Поотдельности оба файла загружаются?
Если два грузите, то на который ругается? (в валидаторе поставьте 'wrongExtension' => 'File: {file}. Allowed extension: {extensions}')
Таки да. Похоже что проблема в кодировке. Ошибку выдает конкретный файл.
Как бы вы посоветовали созадавать pdf из pdf stream? Сейчас это делаю через file_put_contents
А в чем проблема с file_put_contents? Генерите/ковернтируйте имя файла в utf8
Ответить