anourvalar/eloquent-file
Database (Eloquent) layer for files management
4,824
| Install | |
|---|---|
composer require anourvalar/eloquent-file |
|
| Latest Version: | 1.45.7 |
| PHP: | ^8.3 |
| License: | MIT |
| Last Updated: | Sep 8, 2026 |
| Links: | GitHub · Packagist |
Maintainer: AnourValar
Laravel Eloquent File
Installation
composer require anourvalar/eloquent-file
php artisan vendor:publish --tag=AnourValar\EloquentFile\Providers\EloquentFileServiceProvider
Prune command
$schedule->command('eloquent_file:on-zero --days=10')->dailyAt('00:30')->runInBackground()->onOneServer();
Relation
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function fileVirtuals(): \Illuminate\Database\Eloquent\Relations\MorphMany
{
return $this->morphMany(\App\FileVirtual::class, 'entity', 'entity')->orderBy('id', 'ASC');
}
Observer
public function deleting(Model $model)
{
// FileVirtuals
foreach ($model->fileVirtuals()->get() as $item) {
$item->delete();
}
}
Proxy download
// Url signed (web_file group with file prefix)
Route::controller(App\Http\Controllers\FileController::class)->group(function () {
Route::any('/file/{file_virtual}/download/{filename}', 'download')
->middleware('throttle:lax')->name('file.download');
// $this->proxyUrlSigned($request);
});
// User authorized (web_file group with file prefix)
Route::controller(App\Http\Controllers\FileController::class)->group(function () {
Route::any('/file/{file_virtual}/download/{filename}', 'download')
->middleware('auth:sanctum', 'throttle:lax')->name('file.download');
// $this->proxyUserAuthorize($request);
});
Route
\Route::pattern('file_virtual', '[0-9]{1,18}'); // RouteServiceProvider
\Route::pattern('entity_id', '[0-9]{1,18}'); // RouteServiceProvider
Route::prefix('/file')
->controller(App\Http\Controllers\Api\FileController::class)
->group(function () {
Route::post('/upload/{entity}/{entity_id}/{name}', 'upload'); // + middleware
Route::post('/delete/{file_virtual}', 'delete'); // + middleware
});
Controller
class FileController extends Controller
{
use \AnourValar\EloquentFile\Traits\ControllerTrait;
/**
* Web-service: Upload a file
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function upload(Request $request): array
{
$fileVirtual = \DB::transaction(function () use ($request) {
return $this->uploadFileFrom($request);
});
return ['file_virtual' => ['id' => $fileVirtual->id]];
}
/**
* Web-service: Delete a file
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function delete(Request $request)
{
\DB::transaction(function () use ($request) {
$this->deleteFileFrom($request);
});
return ['file_virtual' => ['id' => (int) $request->route('file_virtual')]];
}
}
Related Packages
unisharp/laravel-filemanager
A file upload/editor intended for use with Laravel 5 to 10 and CKEditor / TinyMC...
3,651,997
2,148