PHPackages                             risetechapps/media-for-laravel - 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. [Image &amp; Media](/categories/media)
4. /
5. risetechapps/media-for-laravel

ActiveLibrary[Image &amp; Media](/categories/media)

risetechapps/media-for-laravel
==============================

Laravel package for advanced media and upload management.

1.4.0(1mo ago)0532↓62.5%1MITPHPPHP ^8.4

Since May 27Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/risetechapps/media-for-laravel)[ Packagist](https://packagist.org/packages/risetechapps/media-for-laravel)[ Docs](https://github.com/risetechapps/media-for-laravel)[ RSS](/packages/risetechapps-media-for-laravel/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (34)Versions (11)Used By (1)

Laravel Media
=============

[](#laravel-media)

[![Latest Version on Packagist](https://camo.githubusercontent.com/640e614d6688d238ba25eac8af6cde6d0dc2ba5ac633c1e406a2a6d39b6931c2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7269736574656368617070732f6d656469612d666f722d6c61726176656c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/risetechapps/media-for-laravel)[![Total Downloads](https://camo.githubusercontent.com/4a1abc64dbad439c5fcda1da8539f3974b05ae45483a430a21928edb5cb1d5f8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7269736574656368617070732f6d656469612d666f722d6c61726176656c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/risetechapps/media-for-laravel)[![License](https://camo.githubusercontent.com/f4f9da0ff38dd6413923353a4b4cdaa6fbe16d2870a569ea6f7df5a1eed592fe/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f7269736574656368617070732f6d656469612d666f722d6c61726176656c2e7376673f7374796c653d666c61742d737175617265)](LICENSE)

📌 Sobre o Projeto
-----------------

[](#-sobre-o-projeto)

O **Media For Laravel** é um pacote que **estende as funcionalidades do [spatie/laravel-medialibrary](https://github.com/spatie/laravel-medialibrary)**, simplificando o gerenciamento de uploads e arquivos temporários em aplicações Laravel.

---

✨ Funcionalidades
-----------------

[](#-funcionalidades)

- 🏷 **Upload de arquivos**: Faça upload de arquivos facilmente, sem burocracia.
- 🏷 **Uploads temporários**: Evite sobrecarregar seu armazenamento com uploads descartáveis.
- 🏷 **Compatibilidade S3**: Totalmente compatível com qualquer serviço compatível com S3.
- 🏷 **Prune automático**: Uploads temporários expiram em 2 dias e arquivos marcados para exclusão são removidos após 180 dias.

---

🚀 Instalação
------------

[](#-instalação)

### 1️⃣ Requisitos

[](#1️⃣-requisitos)

Certifique-se de que seu projeto atende aos seguintes requisitos:

- PHP &gt;= 8.4
- Laravel &gt;= 12
- Composer instalado

### 2️⃣ Instalação do pacote

[](#2️⃣-instalação-do-pacote)

```
composer require risetechapps/media-for-laravel
```

### 3️⃣ Configuração do Model

[](#3️⃣-configuração-do-model)

```
use Spatie\MediaLibrary\HasMedia;
use RiseTechApps\Media\Traits\HasConversionsMedia\HasConversionsMedia;
use RiseTechApps\Media\Traits\HasPhotoProfile\HasPhotoProfile;

class Client extends Model implements HasMedia
{
    use HasFactory, HasUuid;
    use HasConversionsMedia, HasPhotoProfile;
}
```

### 💎 Alternativa: Trait Unificada (`HasMediaSuite`)

[](#-alternativa-trait-unificada-hasmediasuite)

Para models que precisam de **todas** as funcionalidades de mídia (uploads gerais + foto de perfil), use a trait unificada:

```
use Spatie\MediaLibrary\HasMedia;
use RiseTechApps\Media\Traits\HasMediaSuite\HasMediaSuite;

class User extends Model implements HasMedia
{
    use HasFactory, HasUuid;
    use HasMediaSuite; // Inclui HasConversionsMedia + HasPhotoProfile
}
```

> **Diferença:**
>
> - `HasConversionsMedia` → Uploads gerais, ícones, coleções
> - `HasPhotoProfile` → Apenas helpers para foto de perfil
> - **`HasMediaSuite`** → **Ambas juntas** (recomendado para User, Company, Employee)

### 4️⃣ Registro das rotas

[](#4️⃣-registro-das-rotas)

```
use Illuminate\Support\Facades\Route;

Media::routes();
```

### 5️⃣ Exemplo de uso no Controller

[](#5️⃣-exemplo-de-uso-no-controller)

```
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use RiseTechApps\Media\Services\MediaUploadService;

class ClientController extends Controller
{
    protected MediaUploadService $mediaUploadService;

    public function __construct(MediaUploadService $mediaUploadService)
    {
        $this->mediaUploadService = $mediaUploadService;
    }

    public function store(Request $request): JsonResponse
    {
        try {
            $data = $request->all();
            $uploads = $request->file('uploads');

            $client = Client::create($data);
            $this->mediaUploadService->handleUploadsJob($client, $uploads);

            return response()->json(['success' => true, 'message' => 'Cliente criado com sucesso!']);
        } catch (\Exception $exception) {
            return response()->json(['success' => false, 'message' => $exception->getMessage()], 500);
        }
    }
}
```

---

📡 Rotas
-------

[](#-rotas)

### Upload de Arquivo

[](#upload-de-arquivo)

- **Endpoint:** `/upload`
- **Método:** `POST`

#### Exemplo de Requisição

[](#exemplo-de-requisição)

```
{
  "file": "example.txt",
  "collection": "uploads"
}
```

#### Exemplo de Resposta

[](#exemplo-de-resposta)

```
{
  "success": true,
  "data": {
    "id": "xxxxxxxxx",
    "name": "example",
    "type": "application/text",
    "size": 100,
    "preview": "https://preview/xxxxxx",
    "collection": "uploads"
  }
}
```

---

### Exemplo de uso no Resource

[](#exemplo-de-uso-no-resource)

```
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class ClientsResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'uploads' => $this->getUploads(),
            'photo' => $this->getPhotoProfile()?->jsonSerialize(),
        ];
    }
}
```

---

🎨 Customização Avançada
-----------------------

[](#-customização-avançada)

### Trait Personalizada (Adicionando Coleções/Conversões)

[](#trait-personalizada-adicionando-coleçõesconversões)

Quando você precisa adicionar coleções ou conversões extras **sem perder** as definições padrão das traits, use os métodos `additional*`. Agora fica muito mais simples:

```
