Come utilizzare il disco public nel file di configurazione filesystems di laravel

Questo disco รจ destinato ai file che saranno accessibili pubblicamente.

Pubblicato da ,
Ultima modifica

In questo articolo vedremo come utilizzare il disco public della configurazione filesystems di laravel per rendere accessibili publicamente file e immagini, per ottenere questo bisogna seguire i seguenti step

  • definire le rotte per caricare file e immagini;
  • creare i link simbolici che puntano alla cartella storage/app, in questo esempio avremo due cartelle storage\app\files per i file di testo e storage\app\images per le immagini.

Quindi definiamo le rotte per caricare i file e le immagini in routes\web.php

<?php
//routes\web.php
use Illuminate\Http\Request;

Route::post("/upload_file", function (Request $request)
{
    $request->file("text")
        ->store("files");
});

Route::post("/upload_image", function (Request $request)
{
    $request->file("image")
        ->store("images");
});

sono entrambe richieste di tipo POST, '/upload_file' è l'url che useremo per caricare i files, mentre '/upload_image' è quello per il caricamento delle immagini, in particolare siccome il caricamento avverrà tramite modulo web 'text' (file('text')) e 'image' (file('image')) sono rispettivamente il nome del file e il nome dell'immagine nel tag input del modulo web, mentre store('files') e store('images') indicano che i file verranno salvati nella cartella storage\app\files e le immagini in storage\app\images.

Creiamo le due cartelle storage\app\files e storage\app\images in modo da avere una struttura simile a questa

cartella storage di laravel

aggiungiamo al file config\filesystems.php i link simbolici che vogliamo creare

<?php
//config\filesystems.php

'links' => [
     public_path('files') => storage_path('app/files'),
     public_path('images') => storage_path('app/images'),
],

adesso da CLI lanciamo il comando

$ php artisan storage:link

verranno così generate due cartelle public\files e public\images che punteranno rispettivamente a storage\app\files e storage\app\images, se dalla cartella public lanciamo il comando ls -l vedremo che sono stati creati dei link simbolici

$ cd public && ls -l

lrwxrwxrwx 1 user 197121 51 feb 13 12:25 files -> /storage/app/files
lrwxrwxrwx 1 user 197121 52 feb 13 12:25 images -> /storage/app/images

Per testare il tutto tramite Postman aggiungiamo al file app\Http\Middleware\VerifyCsrfToken.php le seguenti righe

<?php
//app\Http\Middleware\VerifyCsrfToken.php

protected $except = [
		..............
		..............
		"/upload_file",
		"/upload_image"
];

avviamo un server locale tramite php artisan serve

$ php artisan serve

   INFO  Server running on [http://127.0.0.1:8000].

  Press Ctrl+C to stop the server

proviamo a caricare un'immagine

Upload immagine

clicchiamo sul pulsante Send di Postman, se l'immagine è stata caricata correttamente avremo un risultato simile a questo

Storage Immagine

se dal browser apriamo il link

http://127.0.0.1:8000/images/01h73znD0hcAsYNaE5X90GbM54iYdY5hMI2vhhXu.jpg

potremo visualizzare l'immagine, l'esempio seguente è per l'upload di un file

Upload file

anche in questo caso se il file viene caricato correttamente avremo un risultato simile a questo

Storage File

se dal browser apriamo il link

http://127.0.0.1:8000/files/lF8P2RqZT7znPsLXZN41ybsXF4pGGEZefCT5xgSv.txt

potremo visualizzare il file.