Вопрос проверяет, умеете ли вы работать с файловой системой Laravel через диски, пути, загрузку/выдачу файлов и понимаете ли, как это связано с конфигом и драйверами.
В Laravel работа с файлами обычно делается через фасад Storage, который использует настроенные “диски” (local, public, s3 и т.д.). Вы выбираете диск, затем записываете/читаете файлы методами вроде put, get, exists, delete, url. Для загрузок из формы часто берут файл из Request и сохраняют через store/storeAs на нужный диск. Это удобно, потому что можно сменить хранилище (например, local → S3) почти без изменений кода.
Laravel предоставляет единый слой для работы с файловыми хранилищами: локальная ФС, публичные файлы, S3-совместимые хранилища и др.
Определение: Storage — это API (через Flysystem), которое даёт единый интерфейс к разным хранилищам через понятие disk (диск/драйвер).
Настраивают диски в config/filesystems.php (например, local, public, s3).
В коде выбирают диск: Storage::disk('public').
Выполняют операции:
запись: put, putFile, putFileAs
чтение: get, download
проверка/удаление: exists, delete
ссылки: url (для публичных дисков/объектного хранилища)
use Illuminate\Support\Facades\Storage;
Storage::disk('local')->put('logs/custom.txt', "Hello\n");
public function upload(\Illuminate\Http\Request $request)
{
$path = $request->file('avatar')->store('avatars', 'public'); // public disk
return ['path' => $path, 'url' => \Storage::disk('public')->url($path)];
}
storage:linkДля диска public обычно файлы лежат в storage/app/public.
Чтобы они отдавались веб-сервером, создают симлинк:
php artisan storage:link
После этого файлы доступны из public/storage/....
Имена файлов: лучше генерировать уникальные (например, UUID), а не доверять исходному имени.
Безопасность: приватные файлы не кладут в публичный диск; для выдачи используют контроллер + download() или временные ссылки (в зависимости от драйвера).
Абстракция диска: код не должен “знать”, где физически хранится файл (local/S3) — это решается конфигом.
Storage стоит использовать почти всегда вместо прямых file_put_contents() и ручных путей: это даёт переносимость между хранилищами, единый API и более безопасную/управляемую работу с файлами.