Проверка расширения файла

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
FunStrike
Сообщения: 28
Зарегистрирован: 2018.07.23, 13:39

Проверка расширения файла

Сообщение FunStrike »

Здравствуйте. Проблема с проверкай расширения.

Пробелма в том что при расширения docx, xlsx валидация возвращает false, и ошибка что расширение не совпарадет. С остальными все нормально. Не пойму что не так. Проверял documentFile->extension, все корректно. Подскажите :D

Rule:

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

[['documentFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'doc, docx, ppt, pptx, xls, xlsx, pdf, png, jpg, jpeg'],
Upload:

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

public function upload ()
{
	$this->filename = md5($this->original_name . time() . $this->proposal_id) . '.' . $this->documentFile->extension;
	$this->original_name = $this->documentFile->baseName . '.' . $this->documentFile->extension;
	if ($this->validate()) {
		$path = Yii::getAlias('@webroot') . '/uploads/' . $this->proposal_id . '/';
		FileHelper::createDirectory($path);
		$this->documentFile->saveAs($path . $this->filename);
		if ($this->save(false)) return true;
		else return false;
	} else {
		return false;
	}
}
Action:

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

public function actionSaveDocument ($id)
{
	if (Yii::$app->request->isPost) {
		$post = Yii::$app->request->post();
		$document = new Document();
		$document->proposal_id = $id;
		if ($document->load($post)) {
			$document->documentFile = UploadedFile::getInstance($document, 'documentFile');
			if ($document->upload()) Yii::$app->session->addFlash('success', Yii::t('app', 'file_saved'));
			else {
				foreach ($document->errors as $key => $value) {
					Yii::$app->session->addFlash('error', implode(',', $value));
				}
			}
		}
	}
	return $this->redirect(['proposals/edit', 'id' => $id, 'page' => 'documents']);
}
Form:

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

<?php $form = ActiveForm::begin([
        'action' => Url::to(['official-doc/save-document', 'part_id' => $part->id, 'prop_id' => $proposal->id]),
        'id' => 'add_off_doc'
]); ?>
<?= $form->field(new \app\models\OfficialDoc(), 'documentFile')->fileInput(['class' => 'notshow'])->label(false) ?>
<?php ActiveForm::end(); ?>
Последний раз редактировалось FunStrike 2018.08.17, 07:52, всего редактировалось 1 раз.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Проверка расширения файла

Сообщение Loveorigami »

Может docx поставить перед doc?
FunStrike
Сообщения: 28
Зарегистрирован: 2018.07.23, 13:39

Re: Проверка расширения файла

Сообщение FunStrike »

Loveorigami писал(а): 2018.08.16, 22:41 Может docx поставить перед doc?
Попробывал, не помогло
FunStrike
Сообщения: 28
Зарегистрирован: 2018.07.23, 13:39

Re: Проверка расширения файла

Сообщение FunStrike »

up (P.S. d FAQ увидел что есть кнопка для поднятия темы, но так и не нашел его, кто знает нде эта кнопка? :D )
Toshus
Сообщения: 14
Зарегистрирован: 2018.06.06, 21:06

Re: Проверка расширения файла

Сообщение Toshus »

допустимые расширения задаются массивом, например, вот так:

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

'extensions' => [
	'png', 'jpg', 'jpeg', 'bmp', 'tiff', 'gif',
	'doc', 'docx', 'docm',
	'xls', 'xlsx', 'xlsm',
	'ppt', 'pptx', 'pptm',
	'pdf', 'djvu', 'txt',
	'rar', 'zip', '7z', 'gz',
],
FunStrike
Сообщения: 28
Зарегистрирован: 2018.07.23, 13:39

Re: Проверка расширения файла

Сообщение FunStrike »

Решил проблему добавив

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

 'checkExtensionByMimeType' => false
Как я понял, валидация неверно определять типы файлов, из за чего происходит ошибка.
K1R
Сообщения: 4
Зарегистрирован: 2018.08.23, 16:49

Re: Проверка расширения файла

Сообщение K1R »

тоже не проходит валидацию файл .xlsx
checkExtensionByMimeType не помог, не знаю уже что делать
K1R
Сообщения: 4
Зарегистрирован: 2018.08.23, 16:49

Re: Проверка расширения файла

Сообщение K1R »

FunStrike писал(а): 2018.08.23, 08:09 Решил проблему добавив

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

 'checkExtensionByMimeType' => false
Как я понял, валидация неверно определять типы файлов, из за чего происходит ошибка.
тоже не могу настроить валидацию файла .xlsx, checkExtensionByMimeType не помог, не знаю уже что делать
K1R
Сообщения: 4
Зарегистрирован: 2018.08.23, 16:49

Re: Проверка расширения файла

Сообщение K1R »

Файл .xlsx тоже не проходит валидацию. checkExtensionByMimeType не помог, в чем ещё может быть причина?
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Проверка расширения файла

Сообщение mkramer »

Да, была такая же проблема с Laravel. Решилась на уровне операционной системы. docx - это zip с определённой структурой файлов, поэтому приходится пилить много. https://serverfault.com/questions/33808 ... docx-files.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Проверка расширения файла

Сообщение SiZE »

FunStrike писал(а): 2018.08.23, 08:09 Решил проблему добавив

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

 'checkExtensionByMimeType' => false
Как я понял, валидация неверно определять типы файлов, из за чего происходит ошибка.
Добавь свои mime types
FunStrike
Сообщения: 28
Зарегистрирован: 2018.07.23, 13:39

Re: Проверка расширения файла

Сообщение FunStrike »

SiZE писал(а): 2018.08.26, 16:32
FunStrike писал(а): 2018.08.23, 08:09 Решил проблему добавив

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

 'checkExtensionByMimeType' => false
Как я понял, валидация неверно определять типы файлов, из за чего происходит ошибка.
Добавь свои mime types
Да была такая идея, но где то на хите читал что это не совсем безопасно
FunStrike
Сообщения: 28
Зарегистрирован: 2018.07.23, 13:39

Re: Проверка расширения файла

Сообщение FunStrike »

K1R писал(а): 2018.08.24, 09:15 Файл .xlsx тоже не проходит валидацию. checkExtensionByMimeType не помог, в чем ещё может быть причина?
для наглядности

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

...
public $documentFile;
...
[['documentFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'doc, docx, ppt, pptx, xls, xlsx, pdf, png, jpg, jpeg', 'checkExtensionByMimeType' => false],
...

А если так не работает то не знаю=)
Ответить