sajadsdi/laravel-file-management-image
This package provides a robust file management system for Laravel applications, handling core CRUD operations for file storage with a focus on uploads, trash management, and restoration. To begin:
composer require vendor/package-name
php artisan vendor:publish --provider="Vendor\PackageName\PackageServiceProvider"
upload facade or service class to handle file uploads:
use Vendor\PackageName\Facades\FileManager;
$file = FileManager::upload($request->file('document'), 'documents');
$file = FileManager::upload($request->file('image'), 'images');
$file->path; // Full path to the file
$file->url; // Publicly accessible URL
File Uploads
FileManager::upload() with a file and target directory:
$file = FileManager::upload($request->file('file'), 'uploads');
disk parameter:
$file = FileManager::upload($request->file('file'), 'uploads', 's3');
Trash Management
FileManager::trash($fileId); // Returns trashed file model
FileManager::restore($trashedFileId);
FileManager::delete($trashedFileId);
Bulk Operations
FileManager::trash([$fileId1, $fileId2]);
FileManager::restoreTrashed('documents');
FileObserver to trigger custom logic on file events (e.g., saved, deleted).FileUploaded, FileTrashed, or FileRestored:
event(new FileUploaded($file));
FileManager middleware to validate file uploads before processing:
Route::middleware('file.manager')->group(function () {
// Routes requiring file management
});
Disk Configuration
disks array in the published config matches your Laravel filesystems.php settings. Mismatches will cause silent failures during uploads.public; explicitly specify disk for S3/other drivers:
FileManager::upload(..., 'uploads', 's3');
Trash Lifecycle
FileManager::cleanTrash() to purge old trashed files (configured via trash_ttl in config).FileManager::update() to rename if needed:
FileManager::update($fileId, ['name' => 'new-name.jpg']);
Concurrency Issues
DB::transaction(function () {
FileManager::upload($file1);
FileManager::upload($file2);
});
'debug' => env('APP_DEBUG', false),
Storage::disk('local')->diskUsage() to verify available space before uploads.Custom Storage Engines
Override the StorageEngine contract to support non-Laravel storage (e.g., FTP, custom APIs):
class CustomEngine implements StorageEngine {
public function upload($file, $directory) { ... }
}
Register it in the config:
'engines' => [
'custom' => Vendor\PackageName\Engines\CustomEngine::class,
],
Validation Rules
Extend the default validator by publishing and modifying the rules.php config file:
'upload' => [
'max_size' => '10MB',
'allowed_types' => ['jpg', 'png', 'pdf'],
],
Event Customization Subscribe to the package’s events to add pre/post hooks:
FileUploaded::subscribe(function ($event) {
// Send notification, log, etc.
});
How can I help you explore Laravel packages today?