Есть ли в laravel способ сохранить картинку на определенное время?
В самом Laravel'е - вряд ли (скорее всего - нет). По причине того, что это не очень типовая задача и к конкретному фреймворку (например, Laravel) она прямого отношения не имеет.
Или же остается способ загружать картинку как обычно и по крону отчищать директорию?
Я бы пользовался
at, оно как мне видится чуть больше подходит для данной задачи.
Так же, в Redis'е есть возможность устанавливать срок жизни данных, а в Laravel есть поддержка Redis'а. Можно воспользоваться этой возможностью Redis'а, сохраняя данные там. Так же в Redis'е есть "
события", которые в т.ч. могут оповестить о том, что срок жизни "таких-то" данных истёк и привязать соотв. удаление файла связанного с этими данными с диска.
*оба этих варианта, в теории могут дать сбой и данные могут не удалиться, по этой причине раз в N часов/дней я бы рекомендовал всё-таки сканировать директорию с файлами на поиск "неудалённого мусора".
В MySQL есть встроенный
scheduler, файлы можно сохранять там и удалять по истечение срока их жизни (который можно указать при сохранении).
При необходимости можно "притащить тяжелую артилерию", поставить сервер очередей (или использовать уже имеющийся, если таковой есть,
вот тут кое-что об этом писали), соотв. при загрузке картинки добавлять задачу на удаление оной как "отложенную".
P.S. "Что лучше" - зависит от каждого случая индивидуально, если ничего "лишнего" в проекте нет - можно использовать at + cron (для не частых проверок на наличие различного мусора, который по какой-то причине не был удалён, хотя, возможно это и не обязательно, глубоких тестов я не проводил...)