Валидатор расширения файлов и прикрепление картинок в IOs

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

Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение louisvuitton »

Товарищи, какая-то мистическая проблема возникла.

Есть такой валидатор

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

    public function rules()
    {
        return [
            [['files'], 'required', 'message' => 'Необходимо выбрать фото.'],
            [['files'], 'file', 'extensions' => 'png, jpg', 'maxFiles' => 5],
        ];
    }
При прикреплении фото png и jpg с пк, валидация проходит успешно.

При прикреплении фото с ios - если это снятая на камеру фотография jpg, вроде тоже все в порядке, если это скриншот или присланная через какой-нибудь мессенджер картинка png то выдает ошибку "Расширение должно быть jpg или png".

Проовал выводить расширение
$file->extension ($file - Экземпляр UploadedFile)
выводится верно png

ЧТо это за бред?! =/
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение Onotole »

louisvuitton писал(а): 2017.01.25, 11:39 Товарищи, какая-то мистическая проблема возникла.

Есть такой валидатор

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

    public function rules()
    {
        return [
            [['files'], 'required', 'message' => 'Необходимо выбрать фото.'],
            [['files'], 'file', 'extensions' => 'png, jpg', 'maxFiles' => 5],
        ];
    }
При прикреплении фото png и jpg с пк, валидация проходит успешно.

При прикреплении фото с ios - если это снятая на камеру фотография jpg, вроде тоже все в порядке, если это скриншот или присланная через какой-нибудь мессенджер картинка png то выдает ошибку "Расширение должно быть jpg или png".

Проовал выводить расширение
$file->extension ($file - Экземпляр UploadedFile)
выводится верно png

ЧТо это за бред?! =/
Возможно mime тип не нравится. Попробуй 'checkExtensionByMimeType' => false
virtuozz
Сообщения: 14
Зарегистрирован: 2016.11.11, 14:05

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение virtuozz »

Onotole писал(а): 2017.01.25, 12:08 Возможно mime тип не нравится. Попробуй 'checkExtensionByMimeType' => false
Это не безопасно!
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение SiZE »

virtuozz писал(а): 2017.01.25, 12:44 Это не безопасно!
Единственное что не безопасно:
1) сохранять картинки без конвертации
2) сохранять картинки в папке с правами на выполнение скриптов
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение louisvuitton »

Спасибо, при откл checkExtensionByMimeType работает.
Интересно кто виноват, что теряется mime type (
lgXenos
Сообщения: 243
Зарегистрирован: 2015.11.30, 15:42

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение lgXenos »

louisvuitton писал(а): 2017.01.26, 03:22 Интересно кто виноват, что теряется mime type (
А где гарантия, что теряется?
:)
Если у вас линукс - я бы ради интереса проверил, что там
> file --mime-type image.png
image.png: image/png

> file -b --mime-type image.png
image/png

> file -i FILE_NAME
image.png: image/png; charset=binary
Плюс, если вы работаете только с картинками, или ожидаете только картинку, то имеет смысл ориентироваться не на майм-тайм, а на размер изображения у загруженного файла:

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

var_dump(getimagesize($filename));
Если там false в ответе - значит не картинка
А если массив, то конвертируем, как и писали выше в JPG и оставляем себе
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение Onotole »

lgXenos писал(а): 2017.01.26, 09:24 Плюс, если вы работаете только с картинками, или ожидаете только картинку, то имеет смысл ориентироваться не на майм-тайм, а на размер изображения у загруженного файла:

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

var_dump(getimagesize($filename));
Если там false в ответе - значит не картинка
А если массив, то конвертируем, как и писали выше в JPG и оставляем себе
В Yii так картинка и проверяется
lgXenos
Сообщения: 243
Зарегистрирован: 2015.11.30, 15:42

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение lgXenos »

Onotole писал(а): 2017.01.26, 09:40 В Yii так картинка и проверяется
На то она и общая практика. И эт хорошо. Я не сталкивался пока с этим в рамках Yii.
В любом случае автору надо дебажить, что там ему приходит. Т.к. может оказаться, что картинка приходит "битая"

PS: сейчас перечитал первый пост: там не mime-type проверяется, а extension? Или так валидатор и проверяет майм?
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Валидатор расширения файлов и прикрепление картинок в IOs

Сообщение Onotole »

lgXenos писал(а): 2017.01.26, 09:44
Onotole писал(а): 2017.01.26, 09:40 В Yii так картинка и проверяется
На то она и общая практика. И эт хорошо. Я не сталкивался пока с этим в рамках Yii.
В любом случае автору надо дебажить, что там ему приходит. Т.к. может оказаться, что картинка приходит "битая"

PS: сейчас перечитал первый пост: там не mime-type проверяется, а extension? Или так валидатор и проверяет майм?
Единственное, что ему нужно смотреть, так это mime тип приходящего файла. Сначала проверяется расширение, потом mime тип сравнивается с расширением (или в обратном порядке, лень смотреть)
Ответить