profscode / media-management
Profscode Media Management is a streamlined media handling package designed to intelligently process, store, and retrieve uploaded images. It can automatically resize images during upload, generate multiple variations, optimize file names, and associate media with models for easy access. Inspired by
Installs: 14
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/profscode/media-management
Requires
- php: ^8.1 || ^8.2 || ^8.3 || ^8.4
- laravel/framework: ^11.0 || ^12.0
README
This package provides media/file management for your Laravel models. It stores files in a model-based directory structure, generates conversions (thumbnails/webp), and provides convenient URL access.
Installation
composer require profscode/media-management
1. Use Trait in Your Model
use Profscode\MediaManagement\MediaManagement; class User extends Model { use MediaManagement; }
ProfscodeMedia Model Structure
This model keeps metadata about uploaded media files.
Fields
| Field | Description |
|---|---|
| model_id | Related model ID |
| model_type | Model class name |
| collection | Collection name (avatar, gallery, etc.) |
| original_name | Original uploaded filename |
| name | Stored filename |
| mime_type | MIME type |
| disk | Laravel storage disk |
| size | File size |
| conversions | JSON containing thumbnails and webp paths |
addMediaFromRequest Usage
$user = User::find(1); $user->addMediaFromRequest("profile_picture", "avatars");
Requires:
<input type="file" name="profile_picture">
Optional conversion structure:
[
"admin_panel" => [
"width" => 100,
"height" => 100,
"webp" => true
]
]
addMediaFromUrl Usage
$user->addMediaFromUrl("https://domain.com/image.jpg", "gallery");
or
$conversions = [ "admin_panel" => [ "width" => 100, "height" => 100, "webp" => true ] ] $user->addMediaFromUrl("https://domain.com/image.jpg", "gallery", $conversions);
Retrieving Media (Relation)
$user->getMedia();
retrive Media as Collection
getUrl Usage
Original URL:
$media->getFirstMediaUrl($collection = "default");
Thumbnail or WebP:
$media->getFirstMediaUrl($collection , 'admin_panel');
getFirstMediaUrl Usage
$user->getFirstMediaUrl("avatars", "admin_panel");
Storage Structure
storage/app/public/media/{ModelType}/{ModelId}/{collection}/{filename.ext}
License
MIT © Profscode
Support
For issues, please open a GitHub Issue.