<?phpreturn [/* |-------------------------------------------------------------------------- | Default Filesystem Disk |-------------------------------------------------------------------------- | | Here you may specify the default filesystem disk that should be used | by the framework. The "local" disk, as well as a variety of cloud | based disks are available to your application. Just store away! | */'default'=>env('FILESYSTEM_DISK','local'),/* |-------------------------------------------------------------------------- | Filesystem Disks |-------------------------------------------------------------------------- | | Here you may configure as many filesystem "disks" as you wish, and you | may even configure multiple disks of the same driver. Defaults have | been set up for each driver as an example of the required values. | | Supported Drivers: "local", "ftp", "sftp", "s3" | */'disks'=> ['local'=> ['driver'=>'local','root'=>storage_path('app'),'throw'=>false, ],'public'=> ['driver'=>'local','root'=>storage_path('app/public'),'url'=>env('APP_URL').'/storage','visibility'=>'public','throw'=>false, ],'s3'=> ['driver'=>'s3','key'=>env('AWS_ACCESS_KEY_ID'),'secret'=>env('AWS_SECRET_ACCESS_KEY'),'region'=>env('AWS_DEFAULT_REGION'),'bucket'=>env('AWS_BUCKET'),'url'=>env('AWS_URL'),'endpoint'=>env('AWS_ENDPOINT'),'use_path_style_endpoint'=>env('AWS_USE_PATH_STYLE_ENDPOINT',false),'throw'=>false, ],'media'=> ['driver'=>'local','root'=>public_path('media'),'url'=>env('APP_URL').'/media', ], ],/* |-------------------------------------------------------------------------- | Symbolic Links |-------------------------------------------------------------------------- | | Here you may configure the symbolic links that will be created when the | `storage:link` Artisan command is executed. The array keys should be | the locations of the links and the values should be their targets. | */'links'=> [public_path('storage')=>storage_path('app/public'), ],];
<?phpuseIlluminate\Support\Facades\Route;useApp\Http\Controllers\ClientController;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider and all of them will| be assigned to the "web" middleware group. Make something great!|*/Route::get('/',function () {returnview('welcome');});Auth::routes();Route::get('/home', [App\Http\Controllers\HomeController::class,'index'])->name('home');Route::get('client', [ClientController::class,'index'])->name('client');Route::get('client/create', [ClientController::class,'create'])->name('client.create');Route::post('client/store', [ClientController::class,'store'])->name('client.store');
Laravel 9 Upload Images with Spatie Media Library Tutorial
Last updated on: April 24, 2023 by Digamber5.6MUbuntuDDE: New Ubuntu Remix With Deepin Desktop is a Beauty
In this Laravel 9 Spatie media-library tutorial, we will altogether learn how to integrate the spatie media library in the laravel app and show you the perfect example of how to use the Spatie media library in the Laravel application from scratch.
We will cover how to create a simple registration form with name, email and image (avatar) fields and upload avatar images with other form fields using the Laravel Spatie media library package.
Laravel is not a common framework, and it won’t be wrong to say it is a quintessential PHP framework. You can build robust web applications and web APIs with it; it comes with ready-made programming solutions which can exponentially enhance the web development speed.
However, it doesn’t come up with an image upload feature; in this guide, we will show you how to build an image or avatar upload with laravel form using spatie and medialibrary.
So, Let’s start implementing laravel media-library in laravel to upload the image using Spatie. This library comes with tons of features; you can explore more from the official documentation of Laravel Media Library. It is a gold mine of options that profoundly supports Laravel’s eloquent style.
Laravel 9 Upload Avatar Images using Spatie Media Library Example
Step 1: Download Laravel App
Step 2: Update Database Details
Step 3: Install Spatie Medialibrary in Laravel
Step 4: Set Up Migration and Model
Step 5: Build Controller File
Step 6: Build New Routes
Step 7: Set Up Blade View Files
Step 8: Add App URL
Step 9: Run Laravel App
Download Laravel App
Start the first step by using the Composer command to download the latest version of the Laravel app, get to the terminal and execute the command.
Make sure to import InteractsWithMedia and HasMedia services, append HasMedia with implements, and define InteractsWithMedia right after HasFactory service in the model file.
Secondly, get into the app/database/migrations/create_clients_table.php, similarly you need to add the table values into this migration file.
<?phpuseIlluminate\Database\Migrations\Migration;useIlluminate\Database\Schema\Blueprint;useIlluminate\Support\Facades\Schema;classCreateClientsTableextendsMigration{/** * Run the migrations. * * @returnvoid */publicfunctionup() {Schema::create('clients',function (Blueprint $table) { $table->id(); $table->string('name'); $table->text('email'); $table->timestamps(); }); }/** * Reverse the migrations. * * @returnvoid */publicfunctiondown() {Schema::dropIfExists('clients'); }}
PHPCopy
Build Controller File
Next, go to terminal and execute command to generate a controller.
phpartisanmake:controllerClientController
BashCopy
After running above command a new controller file created at app/Http/Controllers/ClientController.php path.
In this file, first import the Client model, we will use ClientController class to store client registeration form along with upload image into the database at the same time into the Medialibrary storage using the spatie media library.
Now, the controller has been set, its time to build new routes to handle the controller’s functions; get inside the routes/web.php and define the three routes with Get and Post methods altogether.
<?phpuseIlluminate\Support\Facades\Route;useApp\Http\Controllers\ClientController;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------*/Route::get('client',[ClientController::class,'index'])->name('client');Route::get('client/create',[ClientController::class,'create'])->name('client.create');Route::post('client/store',[ClientController::class,'store'])->name('client.store');
PHPCopy
Set Up Blade View Files
Now, we are ready to create view files; create two view these files, we will build a form for user registration and create a file to show clients data after fetching from the database.
Import bootstrap 5, create the form tag, pass the action tag along with the route, which stores the name, email and avatar profile image into the database.
After that, make create.php and update code in the app/resources/views/create.blade.php file.
In this step, you have to open the .env configuration file and look for the APP_URL variable and append the given url in-front.
.........APP_URL=http://localhost:8000.........
BashCopy
Run Laravel App
By default, the public disk utilizes the local driver and stores its files in storage/app/public.
To make these files accessible from the web, you should create a symbolic link from public/storage to storage/app/public.
So, we can create the symbolic link to access the storage directory using the artisan command publicly.
phpartisanstorage:link
BashCopy
You have reached final at the end of the tutorial, now start the app using the php artisan command:
phpartisanserve
BashCopy
Here is the link which will help you open the app on the browser and test.
http://localhost:8000/client
BashCopy
Conclusion
the best features of the Laravel framework, which is known as a Laravel file system and Laravel Spatie.
Laravel gives a compelling filesystem abstraction. In addition, it offers a great way to deal with simple drivers for working with local filesystems, SFTP, and Amazon S3.
If your storage requirement changes while developing, you can quickly switch between these storage options between your local development machine and production server as the API remains intact for every system.