risetechapps / media-for-laravel
2.2.0
2025-06-05 02:48 UTC
Requires
- php: ^8.1
- illuminate/support: ^9.0|^10.0
- league/flysystem-aws-s3-v3: ^3.0
- php-ffmpeg/php-ffmpeg: ^1.3
- risetechapps/has-uuid-for-laravel: ^1.0
- risetechapps/monitoring-for-laravel: ^2.2.0
- spatie/laravel-medialibrary: 11.10.0
- spatie/pdf-to-image: ^1.2
- tpetry/laravel-postgresql-enhanced: 2.3.4
Requires (Dev)
- orchestra/testbench: ^7.0|^8.0
- phpunit/phpunit: ^10.0
README
📌 Sobre o Projeto
O Media For Laravel é um pacote que estende as funcionalidades do spatie/laravel-medialibrary, simplificando o gerenciamento de uploads e arquivos temporários em aplicações Laravel.
✨ 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
1️⃣ Requisitos
Certifique-se de que seu projeto atende aos seguintes requisitos:
- PHP >= 8.0
- Laravel >= 10
- Composer instalado
2️⃣ Instalação do pacote
composer require risetechapps/media-for-laravel
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; }
4️⃣ Registro das rotas
use Illuminate\Support\Facades\Route; Media::routes();
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
Upload de Arquivo
- Endpoint:
/upload
- Método:
POST
Exemplo de Requisição
{ "file": "example.txt", "collection": "uploads" }
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
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(), ]; } }
⚙️ Configurações Opcionais
Para habilitar S3, configure o seu .env
:
FILESYSTEM_DISK=s3 AWS_ACCESS_KEY_ID=seu_id AWS_SECRET_ACCESS_KEY=sua_chave AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET=seu_bucket
Para controlar a exclusão automática (prune), ajuste no arquivo config/media.php
:
return [ 'temporary_expiration_days' => 2, 'marked_for_deletion_days' => 180, ];
🛠 Contribuindo
- Faça um fork do repositório
- Crie uma branch (
feature/nova-funcionalidade
) - Commit suas alterações
- Envie um Pull Request
📜 Licença
Distribuído sob a licença MIT. Veja LICENSE para mais detalhes.
💡 Desenvolvido por Rise Tech