devfactory/media

Laravel package for saving uploaded files and linking them with models
12,700 17
Install
composer require devfactory/media
Latest Version:4.0.7
PHP:>=7.2
Laravel:6 – 12
License:MIT
Last Updated:Apr 22, 2026
Links: GitHub  ·  Packagist
Maintainer: devfactory

#Media

This package saves uploaded files and links them with models

Installation

Laravel 5

NOTE: If upgrading from 2.0.0, run php artisan vendor:publish and php artisan migrate

Using Composer, edit your composer.json file to require devfactory/media.

"require": {
  "devfactory/media": "2.0.*"
}

Then from the terminal run

composer update

Then in your app/config/app.php file register the service providers:

'Devfactory\Media\MediaServiceProvider',
'That0n3guy\Transliteration\TransliterationServiceProvider',

From within the laravel folder of your project, run:

php artisan vendor:publish

Followed by:

php artisan migrate

Laravel 4

Using Composer, edit your composer.json file to require devfactory/media.

"require": {
  "devfactory/media": "1.0.*"
}

Then from the terminal run

composer update

Then in your app/config/app.php file register the service providers:

'Devfactory\Media\MediaServiceProvider',
'That0n3guy\Transliteration\TransliterationServiceProvider',

Run the migration to create the DB table:

php artisan migrate --package=devfactory/media

Finally, publish the config to make changes to where and how the files are stored:

php artisan config:publish devfactory/media

Usage

To use the package, you need to add the following to any of your models which will be receiving media uploads.

<?php

class User extends Eloquent {

  use \Devfactory\Media\MediaTrait;

);

Then to save a media, in the method that handles your form submission you just need to pass the File object to saveMedia():

public function upload() {
  $user = User::firstOrCreate(['id' => 1]);

  if (Input::hasFile('image')) {
    $user->saveMedia(Input::file('image'));
  }

  return Redirect::route('route');
}

This will create the file on the file system and insert an entry into the DB table media.

If you need to set multiple different types of images on a Model, like the users' profile picture and a background for their page you can use the second parameter:

$user->saveMedia(Input::file('profile_picture'), 'profile_picture');
$user->saveMedia(Input::file('background_image'), 'background_image');

To retrieve the images again, you just need to call getMedia():

// Retrieves every Media linked with the user
$all_media = $user->getMedia();

// Retrieve a specific Media
$profile_picture = $user->getMedia('profile_picture');

Finally you can delete media with deleteMedia():

// Delete all media for a user
$user->deleteMedia();

// Delete specific media
$user->deleteMedia('profile_picture');

Related Packages

doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

641,106,524 9,700
laravel/framework

The Laravel Framework.

593,882,149 34,959
laravel/tinker

Powerful REPL for the Laravel framework.

502,645,077 7,441
laravel/serializable-closure

Laravel Serializable Closure provides an easy and secure way to serialize closur...

418,291,778 609
nunomaduro/collision

Cli error handling for console/command-line PHP applications.

394,964,158 4,660

Version History

Version Released PHP Laravel License
4.0.7 >=7.2 ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0 MIT
4.0.6 >=7.2 ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0 MIT
4.0.5 >=7.2 ^6.0|^7.0|^8.0|^9.0|^10.0 MIT
4.0.3 >=7.2 ^6.0|^7.0|^8.0 MIT
4.0.2 >=7.2 ~6.0 MIT