Mediabox is a PHP implementation of a web-based file management system. The library makes it easy to interact with the local disk storage's files and folders.
Features include:
- Adding of files and folders
- Copying
- Deleting files from disk
- Displaying and downloading files from browser
- Renaming and Moving files and folders.
- Toggling of hidden files
- Easy syntax to retrieve file meta info like size, permission, last modified date, owner, etc.
Mediabox is also a Laravel package out-of-the-box with minimal setup.
Clone or download this repository then run the demo:plain
composer script:
git clone https://github.com/codrasil/mediabox
cd mediabox/ && composer install
composer demo:plain
The above command will run a built-in PHP server at localhost:8080.
You may also run composer demo:prep
to generate dummy files and folders for the demo.
PHP 7+
php-imagick
(optional; for generating thumbnails)illuminate/cache
:^7.15
illuminate/filesystem
:^7.11
symfony/http-foundation
:^5.0
The library can be installed via composer:
composer require codrasil/mediabox
If used in a Laravel project, the configuration file can be published via artisan
command:
php artisan vendor:publish --tag mediabox
See docs/Laravel for instructions on how to setup in a Laravel project.
use Codrasil\Mediabox\Mediabox;
...
$rootStoragePath = '/path/to/a/storage/folder';
$baseStoragePath = $_GET['p'] ?: $rootStoragePath;
$mediabox = new Mediabox($baseStoragePath, $rootStoragePath);
$mediabox->showHiddenFiles($yes = true);
foreach ($mediabox->all() as $file) {
if ($file->isDir()) {
echo $file->name().'/'.PHP_EOL;
} else {
echo $file->name().PHP_EOL;
}
}
If using within a Laravel project, just inject the Codrasil\Mediabox\Mediabox
class to a controller or another class.
// routes/web.php
use Codrasil\Mediabox\Mediabox;
use Illuminate\Http\Request;
Route::get('media', function (Request $request, Mediabox $mediabox) {
return view('path.to.a.view')->withMediabox($mediabox);
});
{{-- resources/views/path/to/a/view.blade.php --}}
@foreach ($mediabox->all() as $file)
@if ($file->isDir())
<p><i class="{{ $file->icon() }}"> </i>{{ $file->name() }}/</p>
@else
<p><i class="{{ $file->icon() }}"> </i>{{ $file->name() }}</p>
@endif
@endforeach
Note by default, the library will list the files and folders listed in storage/app/public/media
.
To change the path, update the root_path
value in config/mediabox.php
file.
All the necessary setup is taken cared of by the Codrasil\Mediabox\MediaboxServiceProvider
class.
See config/mediabox.php
to view all available customization options.
See also docs/Laravel for more information on how to use the library on a Laravel project.
$mediabox->addFolder('Reminders');
$mediabox->addFile('Reminders/groceries.todo', 'Milk');
Adding folders is recursive by default.
The copy
method accepts the relative path of the file to be copied as first argument.
The second argument is the new file name.
$mediabox->copy('Reminders/groceries.todo', 'Copy of groceries.todo');
$mediabox->copy('Reminders', 'Copy of Reminders');
// or
$mediabox->copyDirectory('Reminders', 'Copy of Reminders');
The rename
and move
methods accept a $path
and $target
destination.
$mediabox->rename('Reminders/groceries.todo', 'Reminders/My Grocery List.todo');
// or
$mediabox->move('Reminders/groceries.todo', 'Reminders/My Grocery List.todo');
The delete
method can accept a path or array of paths.
$mediabox->delete('Copy of Reminders');
$mediabox->delete('Copy of groceries.todo');
// or
$mediabox->delete(['Copy of Reminders', 'Copy of groceries.todo']);
To display a file on a browser, use the stream
or fetch
method.
$mediabox->stream('/path/to/a/file.txt');
// or
$mediabox->fetch('/path/to/a/file.txt');
To force browser to download the file, use the download
method.
$mediabox->download('/path/to/a/file.txt');
Both methods will return an instance of Symfony\Component\HttpFoundation\BinaryFileResponse
.
To learn more about the API, see the docs folder.
For more example implementation, checkout docs/examples folder.
For instructions on how to use in a Laravel project, see docs/Laravel.
For instructions on how to use in a Laravel + VueJS project, see docs/VueJS.
The library is open-source software licensed under the MIT license.