Некорректное определение mime type файлов docx/xlsx 20-16/19г

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
itechman
Сообщения: 4
Зарегистрирован: 2018.06.18, 14:32

Некорректное определение mime type файлов docx/xlsx 20-16/19г

Сообщение itechman »

Здравствуйте, общий вопрос, 100% все сталкивались.

На основе API FileValidator. Файл doc проходит валидацию, форматы docx/xlsx не проходят по умолчанию, ни с выключенным checkExtensionByMimeType.

Mime type загруженных файлов и указанных правил в rules() идентичны. Вывожу в сообщениях в контроллере ниже.

Если не лень, опробуйте сами, 5-7 мин займет.

Model

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

[
                'document_upload',
                'file',
                'extensions' => [
                    'xlsx',
                    'docx',
                    'doc',
                ],
                'checkExtensionByMimeType' => false,
                'mimeTypes' => [
                    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                    'application/msword',
                ],
            ]
 
Controller

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

public function actionCreate()
    {
        $model = new Documents();
        if ($model->load(Yii::$app->request->post())) {

            $model->document_upload = UploadedFile::getInstance($model, 'document_upload');
            
            if ($model->validate() && $model->save()) {
                $model->document_upload->saveAs(  'upload/files/' . $model->document);
                
                // Показ mime типа файла
                Yii::$app->getSession()->setFlash( 'success',  'Документ успешно добавлен.' . $model->document_upload->type);
                
                return $this->redirect(['index']);
            }
            // Mime type идентичен с файлами docx,xlsx
            Yii::$app->getSession()->setFlash(  'danger',  'Не удалось верифицировать или сохранить файл, попробуйте снова.' . $model->document_upload->type
            );
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }
View

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

<?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'document_upload')->fileInput() ?>
    <?= Html::submitButton( ' Сохранить') ?>
<?php ActiveForm::end(); ?>
ps.
1. Дело в validate(), выносил save() внутрь выражения.
2. var_dump при вызове после UploadedFile::getInstance в контроллере дает идентичный mime.
3. Если в rules() указать application/* файлы docx/xlsx проходят валидацию, но ведь под это правило проходят куча типов.

Сожалею, если где-то опечатался, но я проверял несколько раз.

Есть у кого идеи? Спасибо тем не менее за потраченное время на прочтение.
itechman
Сообщения: 4
Зарегистрирован: 2018.06.18, 14:32

Re: Некорректное определение mime type файлов docx/xlsx 20-16/19г

Сообщение itechman »

Решено.

Проблема с создаваемыми файлами офисов 2016-2019.
Ответить