<img src="./docs/images/banner.png"/>
<a href="https://oneduo.github.io/nova-file-manager/" taget="_blank"><img src="./docs/images/documentation.png"/></a>
<a href="https://novapackages.com/packages/oneduo/nova-file-manager" target="_blank"><img src="./docs/images/support.png"/></a>
# Nova File Manager
<div align="left">

[](/LICENSE)


[](https://packagist.org/packages/oneduo/nova-file-manager)
[](https://packagist.org/packages/bbs-lab/nova-file-manager)
[](https://packagist.org/packages/oneduo/nova-file-manager)
[](https://github.com/oneduo/nova-file-manager/actions/workflows/tests.yml)
[](https://codecov.io/github/oneduo/nova-file-manager)
</div>
---
<p>
A file manager tool and field for Laravel Nova. Beautifully designed, and customizable, this tool will provide a plug'n'play solution for your file management needs.
**Features :**
โก๏ธ Blazing fast
๐ฆ๏ธ Laravel Nova 4 compatible
๐ Built with Tailwindcss 3, Vue 3 and Pinia
๐ชจ Rock solid codebase built with Typescript
๐ฝ Multi disk and filesystem support
๐งฉ Supports chunk and resumable uploads
๐ง Various customization and configuration options
๐ A performant local search feature with Spotlight
๐คนโ Can save multiple assets from the same field
๐ Access control and authorization gates
โ๏ธ Built-in crop tool and image editor
๐ Built-in PDF viewer
๐๏ธ Drag and drop upload, with entire folder upload support
๐๏ธ Supports unzipping files
๐ฉ Onboarding tour for new users
</p>
## Table of Contents
- [Getting Started](#getting_started)
- [Prerequisites](#prerequisites)
- [Installing](#installing)
- [Configuration](#configuration)
- [Usage](#usage)
- [Configuration](#configuration-file)
- [Authors](#authors)
- [Screenshots](#screenshots)
- [Changelog](#changelog)
- [Security](#security)
- [Contributing](#contributing)
- [Credits](#credits)
- [License](#license)
## Getting Started <a name = "getting_started"></a>
### Prerequisites
This package requires the following :
- PHP 8.0 or higher
- Laravel Nova 4
> **Note** If you plan on using this package with an S3 bucket, be mindful to follow the instructions
> for <a href="https://laravel.com/docs/9.x/filesystem#s3-driver-configuration">setting up an S3 storage disk. </a>
### Installing
To get started, you will need to install the following dependencies :
```
composer require oneduo/nova-file-manager
```
That's it, you're ready to go!
### Configuration
You may publish the package's configuration by running the following command :
```bash
php artisan vendor:publish --tag="nova-file-manager-config"
```
> **Note** You can find details about the configuration options in
> the [configuration file section](#configuration-file).
## Usage <a name="usage"></a>
To get yourself started, you need to add the following tool to your `NovaServiceProvider.php`
```php
// NovaServiceProvider.php
use Oneduo\NovaFileManager\NovaFileManager;
class NovaServiceProvider extends NovaApplicationServiceProvider
{
// ...
public function tools(): array
{
return [
// ... any other tools
NovaFileManager::make(),
];
}
}
```
Now that the tool is registered, if you go back to your Nova dashboard, you should see a new navigation entry labeled "
File Manager".
Once you've added the tool, you can start using it.
Go ahead and add a `FileManager` field to your Nova resource.
```php
// app/Nova/User.php
use Oneduo\NovaFileManager\FileManager;
class User extends Resource
{
// ...
public function fields(NovaRequest $request): array
{
return [
// ... any other fields
FileManager::make(__('Avatar'), 'avatar'),
];
}
}
```
You have now successfully added a File Manager field to your resource.
## Configuration file <a name = "configuration-file"></a>
| Key | Description | Type | Default | Notes |
|--------------------------------------|------------------------------------------------------------------------------------------|------------|-----------|-------------------------------------------------------------------|
| `default_disk` | The default disk used by the package | `string` | `public` | The default disk must be defined in your `filesystems.php` config |
| `available_disks` | Provides a list of available disks to be used by the package | `string[]` | - | |
| `show_hidden_files` | Toggles whether or not to show files and folders that start with a "dot" | `bool` | `false` | |
| `human_readable_size` | When set to true, the package will display file sizes in a more friendly readable format | `bool` | `true` | |
| `human_readable_datetime` | When set to true, the package will display dates with `diffForHumans()` | `bool` | `true` | |
| `file_analysis.enable` | When set to true, the package will use getID3 to parse metadata from the files | `bool` | `true` | |
| `file_analysis.cache.enable` | When set to true, the package will cache the file analysis result | `bool` | `true` | |
| `file_analysis.cache.ttl_in_seconds` | TTL for analysis caching in seconds | `int` | `86400` | |
| `url_signing.enabled` | When set to true, all the file urls will be signed | `bool` | `false` | |
| `url_signing.unit` | Defines the unit for the expiration time | `string` | `minutes` | The expiration time must not exceed 1 week |
| `url_signing.value` | Defines the value for the expiration time | `int` | `10` | |
For a full list of updated configuration options, please refer to the full documentation
at https://oneduo.github.io/nova-file-manager/configuration.html
## Authors <a name = "authors"></a>
- [Charaf Rezrazi](https://github.com/rezrazi)
- [Mikaรซl Popowicz](https://github.com/mikaelpopowicz)
See also the list of [contributors](https://github.com/oneduo/nova-file-manager/contributors) who
participated in this project.
## Screenshots <a name= "screenshots"></a>
You can find more screenshots here https://oneduo.github.io/nova-file-manager/screenshots.html.
## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
## Security
If you discover any security related issues, please email charaf@rezrazi.fr instead of using the issue tracker.
## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
## Credits
- [getID3() by James Heinrich](https://github.com/JamesHeinrich/getID3)
- [Laravel Chunk Upload](https://github.com/pionl/laravel-chunk-upload)
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.