Абстрактный слой для работы с облачными хранилищами (S3, DO Spaces, Minio, GCS).
- Единый интерфейс для любого S3-совместимого хранилища
- Генерация уникальных имён файлов (UUID + безопасное оригинальное имя)
- Временные подписанные ссылки для приватных файлов
- Полный CRUD: загрузка, удаление, копирование, перемещение, списки
- Строгая типизация и value objects вместо массивов
- 100% покрытие тестами с моками Storage фасада
- Скопируйте папку
src/в свой проект - Зарегистрируйте провайдер в
config/app.php:
App\Services\CloudStorage\CloudStorageServiceProvider::class,- Опубликуйте конфиг:
php artisan vendor:publish --tag=cloud-storage-config- Укажите нужный диск в .env: CLOUD_STORAGE_DISK=s3
use App\Services\CloudStorage\CloudStorageService;
$storage = new CloudStorageService('s3');
// Загрузка
$result = $storage->upload($request->file('avatar'), 'users/avatars');
// Временная ссылка (60 минут)
$url = $storage->temporaryUrl($result->path, 60);
// Удаление
$storage->delete($result->path);php artisan test --filter=CloudStorageServiceTest