PHPackages                             sierratecnologia/media-manager - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. sierratecnologia/media-manager

ActiveLibrary

sierratecnologia/media-manager
==============================

MediaManager de Arquivos

0.4.4(2y ago)01001MITPHPPHP ^7.2|^8.0CI failing

Since Sep 19Pushed 6mo ago1 watchersCompare

[ Source](https://github.com/SierraTecnologia/MediaManager)[ Packagist](https://packagist.org/packages/sierratecnologia/media-manager)[ Docs](https://sierratecnologia.com/packages/media-manager/)[ Fund](https://ricasolucoes.com.br/open-source/support-us)[ GitHub Sponsors](https://github.com/ricasolucoes)[ RSS](/packages/sierratecnologia-media-manager/feed)WikiDiscussions stable Synced 3d ago

READMEChangelogDependencies (17)Versions (15)Used By (1)

SierraTecnologia MediaManager
=============================

[](#sierratecnologia-mediamanager)

**SierraTecnologia MediaManager** Various functionality, and basic controller included out-of-the-box.

[![Packagist](https://camo.githubusercontent.com/0df581de58a80443bc1137cc91fb8f5ccd50ac769bf9c7ad10303cb919670756/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7369657272617465636e6f6c6f6769612f6d656469612d6d616e616765722e7376673f6c6162656c3d5061636b6167697374267374796c653d666c61742d737175617265)](https://packagist.org/packages/sierratecnologia/media-manager)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/690370de1fe2a001a46697e2d26b56af2b363d564c62c173bba333937b057094/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f7369657272617465636e6f6c6f6769612f6d656469612d6d616e616765722e7376673f6c6162656c3d5363727574696e697a6572267374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/sierratecnologia/media-manager/)[![Travis](https://camo.githubusercontent.com/f3657bdcacc6f41f455f65485997899478cc072e47340d652f5ee09482241862/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f7369657272617465636e6f6c6f6769612f6d656469612d6d616e616765722e7376673f6c6162656c3d5472617669734349267374796c653d666c61742d737175617265)](https://travis-ci.org/sierratecnologia/media-manager)[![StyleCI](https://camo.githubusercontent.com/4191b35d1ee7b0da2e27c1fe2bd612ce3dfe1673a64523a762f99155892e2142/68747470733a2f2f7374796c6563692e696f2f7265706f732f36303936383838302f736869656c64)](https://styleci.io/repos/60968880)[![License](https://camo.githubusercontent.com/43e907996b8ead5be8fba5a0371e0e5bd69bd8057552103712024e89a97613f0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7369657272617465636e6f6c6f6769612f6d656469612d6d616e616765722e7376673f6c6162656c3d4c6963656e7365267374796c653d666c61742d737175617265)](https://github.com/sierratecnologia/media-manager/blob/master/LICENSE)[![Build Status](https://github.com/sierratecnologia/media-manager/workflows/CI%20-%20Quality%20%26%20Tests/badge.svg)](https://github.com/sierratecnologia/media-manager/actions)

---

📚 Índice
--------

[](#-índice)

- [Introdução](#-introdu%C3%A7%C3%A3o)
- [Instalação](#-instala%C3%A7%C3%A3o)
- [Arquitetura e Estrutura Interna](#-arquitetura-e-estrutura-interna)
- [Principais Funcionalidades](#-principais-funcionalidades)
- [Uso Prático](#-uso-pr%C3%A1tico)
- [Integração com o Ecossistema SierraTecnologia](#-integra%C3%A7%C3%A3o-com-o-ecossistema-sierratecnologia)
- [Extensão e Customização](#-extens%C3%A3o-e-customiza%C3%A7%C3%A3o)
- [Exemplos Reais](#-exemplos-reais)
- [Guia de Contribuição](#-guia-de-contribui%C3%A7%C3%A3o)
- [Suporte](#-suporte)
- [Segurança](#-seguran%C3%A7a)

---

🎯 Introdução
------------

[](#-introdução)

### O que é o MediaManager?

[](#o-que-é-o-mediamanager)

O **MediaManager** é uma biblioteca Laravel robusta e extensível desenvolvida pela **SierraTecnologia** para gerenciamento completo de mídias (imagens, vídeos, arquivos e documentos). Ele fornece uma camada de abstração poderosa sobre o sistema de armazenamento do Laravel, facilitando upload, manipulação, versionamento e recuperação de arquivos multimídia.

### Objetivo e Filosofia

[](#objetivo-e-filosofia)

O MediaManager foi concebido com os seguintes princípios:

- **Abstração de Storage**: Suporte nativo para múltiplos drivers (local, S3, Google Drive, Dropbox, SFTP)
- **Processamento Inteligente**: Manipulação automática de imagens (resize, crop, thumbnails) via Intervention Image
- **Segurança**: Criptografia de URLs e controle de acesso a arquivos sensíveis
- **Padronização**: Interface consistente para gerenciamento de mídias em todo o ecossistema SierraTecnologia
- **Performance**: Cache inteligente e otimização de armazenamento
- **Rastreabilidade**: Integração com sistema de tracking e auditoria

### Benefícios

[](#benefícios)

✅ **Reutilização de Código**: Uma única API para gerenciar mídias em múltiplos projetos ✅ **Segurança**: URLs criptografadas e validação de tipos de arquivo ✅ **Escalabilidade**: Suporte a CDNs e armazenamento distribuído ✅ **Produtividade**: Helpers e facades para operações comuns ✅ **Manutenibilidade**: Código organizado seguindo padrões SOLID e PSR-12

### Contexto no Ecossistema SierraTecnologia

[](#contexto-no-ecossistema-sierratecnologia)

O MediaManager é parte fundamental do **ecossistema SierraTecnologia / Rica Soluções**, integrando-se com:

- **CMS SierraTecnologia**: Gerenciamento de conteúdo e assets
- **Market**: Upload de produtos e imagens de catálogo
- **Arquiteto**: Documentação técnica e diagramas
- **Locaravel**: Sistema de localização com mídias geolocalizadas

---

📦 Instalação
------------

[](#-instalação)

### Requisitos Mínimos

[](#requisitos-mínimos)

- **PHP**: `^7.2 | ^8.0 | ^8.1 | ^8.2 | ^8.3`
- **Laravel**: `^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0`
- **Extensões PHP**: `gd`, `exif`, `imagick` (recomendado), `fileinfo`

### Instalação via Composer

[](#instalação-via-composer)

```
composer require sierratecnologia/media-manager
```

### Publicação de Configurações

[](#publicação-de-configurações)

```
# Publicar configurações do MediaManager
php artisan vendor:publish --provider="MediaManager\MediaManagerProvider" --tag=config

# Publicar views (opcional)
php artisan vendor:publish --provider="MediaManager\MediaManagerProvider" --tag=views

# Publicar migrations
php artisan vendor:publish --provider="MediaManager\MediaManagerProvider" --tag=migrations

# Executar migrations
php artisan migrate
```

### Registro de Service Providers

[](#registro-de-service-providers)

O MediaManager utiliza **auto-discovery** do Laravel. Se necessário, registre manualmente em `config/app.php`:

```
'providers' => [
    // ...
    MediaManager\MediaManagerProvider::class,
],

'aliases' => [
    // ...
    'MediaManager' => MediaManager\Facades\MediaManager::class,
    'FileService' => MediaManager\Services\FileService::class,
],
```

### Configuração de Drivers de Storage

[](#configuração-de-drivers-de-storage)

Configure os drivers desejados em `config/filesystems.php`:

```
'disks' => [
    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],

    'google' => [
        'driver' => 'google',
        'clientId' => env('GOOGLE_DRIVE_CLIENT_ID'),
        'clientSecret' => env('GOOGLE_DRIVE_CLIENT_SECRET'),
        'refreshToken' => env('GOOGLE_DRIVE_REFRESH_TOKEN'),
        'folderId' => env('GOOGLE_DRIVE_FOLDER_ID'),
    ],
],
```

---

🏗️ Arquitetura e Estrutura Interna
----------------------------------

[](#️-arquitetura-e-estrutura-interna)

### Organização de Pastas e Namespaces

[](#organização-de-pastas-e-namespaces)

```
src/
├── Builders/          # Construtores de objetos complexos (Photos, Thumbnails)
├── Console/           # Comandos Artisan
├── Contracts/         # Interfaces e contratos
├── DataTables/        # Integração com DataTables
├── Elements/          # Componentes de processamento (VideoEncoder)
├── Entities/          # Entidades de domínio e DTOs
│   └── Uploads/       # Serviços de upload (Image, Attachment)
├── Events/            # Eventos do sistema
├── Exception/         # Exceções customizadas
├── Facades/           # Facades Laravel
├── Http/              # Camada HTTP
│   ├── Api/           # Controllers API
│   ├── Controllers/   # Controllers Web
│   ├── Policies/      # Policies de autorização
│   ├── Requests/      # Form Requests
│   └── Resources/     # API Resources
├── Managers/          # Gestores de alto nível
├── Models/            # Eloquent Models
├── Observers/         # Eloquent Observers
├── Providers/         # Service Providers customizados
├── Repositories/      # Camada de repositórios
├── Services/          # Serviços de negócio
└── Utils/             # Utilitários e helpers

```

### Padrões Adotados

[](#padrões-adotados)

#### 1. Repository Pattern

[](#1-repository-pattern)

Abstração da camada de acesso a dados:

```
// src/Repositories/ImageRepository.php
class ImageRepository
{
    public function find($id)
    {
        return Image::find($id);
    }

    public function saveFromUpload($file, $directory = 'images')
    {
        // Lógica de persistência
    }
}
```

#### 2. Service Layer

[](#2-service-layer)

Lógica de negócio isolada:

```
// src/Services/FileService.php
class FileService
{
    public static function saveFile($fileName, $directory = '', $fileTypes = [])
    {
        // Validação, processamento e armazenamento
    }
}
```

#### 3. Event-Driven Architecture

[](#3-event-driven-architecture)

Eventos para desacoplamento:

```
// src/Events/MediaFileAdded.php
class MediaFileAdded
{
    public $media;

    public function __construct($media)
    {
        $this->media = $media;
    }
}
```

#### 4. Observer Pattern

[](#4-observer-pattern)

Observers Eloquent para side-effects:

```
// src/Observers/MediaObserver.php
class MediaObserver
{
    public function created(Media $media)
    {
        // Gerar thumbnails, processar metadata, etc.
    }
}
```

### Comunicação entre Camadas

[](#comunicação-entre-camadas)

```
┌─────────────────┐
│   Controller    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Form Request   │ ◄── Validação
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│    Service      │ ◄── Lógica de Negócio
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   Repository    │ ◄── Persistência
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│     Model       │ ◄── Eloquent ORM
└─────────────────┘

```

### Convenções e Boas Práticas

[](#convenções-e-boas-práticas)

- **PSR-12**: Padrão de codificação
- **Type Hints**: Declaração de tipos em métodos e propriedades
- **Docblocks**: Documentação inline para IDEs
- **Dependency Injection**: Injeção de dependências via Container
- **Single Responsibility**: Cada classe tem uma responsabilidade única

---

⚙️ Principais Funcionalidades
-----------------------------

[](#️-principais-funcionalidades)

### 1. Upload e Manipulação de Arquivos

[](#1-upload-e-manipulação-de-arquivos)

#### Upload Simples

[](#upload-simples)

```
use MediaManager\Services\FileService;

$result = FileService::saveFile('documento', 'uploads/documentos', ['pdf', 'docx']);

// Retorna:
// [
//     'original' => 'contrato.pdf',
//     'name' => 'uploads/documentos/a3f8b9c2d1e4f5a6b7c8d9e0f1a2b3c4.pdf'
// ]
```

#### Upload de Clones (arquivos existentes)

[](#upload-de-clones-arquivos-existentes)

```
$result = FileService::saveClone('/path/to/file.jpg', 'clones/', ['jpg', 'png']);
```

### 2. Gerenciamento de Imagens

[](#2-gerenciamento-de-imagens)

#### Upload e Processamento Automático

[](#upload-e-processamento-automático)

```
use MediaManager\Entities\Uploads\ImageService;

$imageService = app(ImageService::class);

$image = $imageService->save(
    request()->file('imagem'),
    'produtos/',
    [
        'resize' => ['width' => 1200, 'height' => 800],
        'thumbnail' => true,
        'watermark' => true,
    ]
);
```

#### Geração de Thumbnails

[](#geração-de-thumbnails)

```
use MediaManager\Builders\ThumbnailBuilder;

$thumbnail = ThumbnailBuilder::create()
    ->forMedia($media)
    ->withDimensions(300, 200)
    ->withQuality(85)
    ->build();
```

#### Manipulação com Intervention Image

[](#manipulação-com-intervention-image)

```
use MediaManager\Services\ImagineImageProcessor;

$processor = app(ImagineImageProcessor::class);

$processedImage = $processor->resize($imagePath, 800, 600);
$croppedImage = $processor->crop($imagePath, 400, 400, 'center');
$watermarked = $processor->watermark($imagePath, $watermarkPath, 'bottom-right');
```

### 3. Integração com Drivers de Armazenamento

[](#3-integração-com-drivers-de-armazenamento)

#### Configuração Multi-Driver

[](#configuração-multi-driver)

```
// Salvar em S3
Storage::disk('s3')->put($path, $contents);

// Salvar em Google Drive
Storage::disk('google')->put($path, $contents);

// Salvar em Dropbox
Storage::disk('dropbox')->put($path, $contents);
```

#### Sincronização entre Disks

[](#sincronização-entre-disks)

```
$localPath = 'uploads/video.mp4';
$s3Path = 'videos/video.mp4';

// Copiar de local para S3
Storage::disk('s3')->put(
    $s3Path,
    Storage::disk('local')->get($localPath)
);
```

### 4. Controle de Permissões e Autenticação

[](#4-controle-de-permissões-e-autenticação)

#### URLs Criptografadas

[](#urls-criptografadas)

```
use MediaManager\Services\FileService;

// URL pública protegida
$publicUrl = FileService::fileAsPublicAsset('private/documento.pdf');
// Retorna: /public-asset/eyJpdiI6IkR...

// URL de download
$downloadUrl = FileService::fileAsDownload('private/arquivo.zip', 'Arquivo.zip');
// Retorna: /public-download/eyJpdiI6...
```

#### Rotas Protegidas

[](#rotas-protegidas)

```
// routes/web.php
Route::get('/public-asset/{encrypted}', [FilesController::class, 'publicAsset'])
    ->middleware(['auth', 'can:view-media']);

Route::get('/public-download/{encrypted}/{name}', [FilesController::class, 'download'])
    ->middleware(['auth', 'can:download-media']);
```

### 5. Processamento de Vídeo

[](#5-processamento-de-vídeo)

#### Encoding de Vídeos

[](#encoding-de-vídeos)

```
use MediaManager\Elements\VideoEncoder;

$encoder = new VideoEncoder();

$encoded = $encoder->encode(
    '/path/to/video.mp4',
    'outputs/encoded.mp4',
    [
        'resolution' => '1280x720',
        'bitrate' => '2000k',
        'codec' => 'h264',
    ]
);
```

### 6. Playlists e Organização

[](#6-playlists-e-organização)

#### Criar Playlist

[](#criar-playlist)

```
use MediaManager\Models\Playlist;
use MediaManager\Models\Video;

$playlist = Playlist::create([
    'name' => 'Tutoriais Laravel',
    'description' => 'Série de tutoriais sobre Laravel',
    'is_public' => true,
]);

$playlist->videos()->attach([1, 2, 3, 4]);
```

---

💻 Uso Prático
-------------

[](#-uso-prático)

### Exemplo Completo: Upload de Imagem de Produto

[](#exemplo-completo-upload-de-imagem-de-produto)

```
