Ваши варианты:
1. Использовать свой сервис, как предлагает
Anatoliy Lyovkin.
2. Использовать Job.
3. Использовать модель.
4. Использовать отдельный роут для загрузки файлов и делать всё в контроллере.
Каждый из них обладает своими плюсами и минусами и каждый имеет право на жизнь.
Лично я, решая точно такую же задачу, воспользовался последним вариантом, поскольку нужно показывать миниатюры картинок при загрузке.
Думал использовать command bus, но к сожалению заменили на jobs, я так понял что jobs не для этих целей, они как бы в основном используются с очередями.
Их просто переименовали. Смысл от этого не поменялся нисколько, просто теперь их сложнее перепутать с консольными командами. Делайте так или через методы модели файла, например.