Потоковое сжатие изображений при загрузке на сервер (Yii2 и не только)

Интро

Вчера я закончил работу над CRM системой, где заказчик попросил осуществить следующую схему: к клиенту надо было приложить сканы паспорта, но дабы не забивать место на диске, надо было сжать их при загрузке на сервер, если они превышали размер в два мегабайта. Искал информацию по этому поводу, но нашел только создание миниатюр и ресайз. Поэтому попробовал включить голову и быстро сделал аналогию, но без пересохранения исходного изображения. Всё это сделал с использованием фреймворка Yii2.

Model

Для загрузки изображений у меня была создана модель ActiveRecord, описывающая кросс-таблицу, которая хранила в себе айди кейса исходное название файла на сервере и создающееся автоматически имя файла на сервере.

В коде используется переменная $dopfiles, которую мы потом исользуем, чтобы собрать несколько изображений.

Controller

View

Здесь надо сказать, что я использовал расширение для Yii2 (https://github.com/kartik-v/yii2-widget-fileinput). Но можно без пролем использовать и обычный встроенный FileInput.

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