Sono nuovo in Laravel e sto provando a memorizzare immagini private in modo che solo gli utenti autenticati possano accedervi. Innanzitutto ho memorizzato le immagini nella cartella Public/UserImages. Ma qui tutte le immagini sono accessibili anche agli utenti non autenticati andando su Inspect Element di chrome e quindi modificando gli ID utente. Gentilmente aiutatemi ...Come gestire le immagini private in laravel 5?
risposta
Dipende solo da voi. Si avrà bisogno di essere al di fuori della directory public
- io personalmente scelgo resources/uploads
o storage/uploads
, o memorizzarli off-server completamente utilizzando il cloud filesystem support.
Qualunque cosa si sceglie, avrete bisogno di un percorso che va a prendere il file e lo passa lungo per l'utente dopo aver controllato che abbiano accesso.
seguito è come ho risolto il problema della memorizzazione delle immagini in laravel 5 tale che solo gli utenti autenticati possono visualizzare le immagini. Le persone che non sono autenticate verranno indirizzate a una pagina di accesso. Il mio server è un server Ubuntu/Apache2.
creare la directory/var/www/yourwebsite/app/assets/images
Aggiungi percorso per app/Http/routes.php.
Route::get('/images/{file}','[email protected]');
Creare un'App Controller/HTTP/Controller/ImageController.php
<?php namespace App\Http\Controllers; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Auth; class ImageController extends Controller { public function __construct() { $this->middleware('auth'); } public function getImage($filename) { $path = '/var/www/YOURWEBSITE/app/Assets/Images/'.$filename; $type = "image/jpeg"; header('Content-Type:'.$type); header('Content-Length: ' . filesize($path)); readfile($path); } }
a suo avviso si hanno i tag img che hanno:
src="{{ url('/images/test.jpg') }}"
Questo ovviamente presuppone test.jpg è un file in/var/www/YOURWEBSITE/app/assets/images/
Naturalmente, è possibile aggiungere più logica, come non hardcoding il percorso delle immagini, ecc Questo è solo un semplice esempio per far rispettare l'autenticazione. Notare l'uso del middleware ('auth') nel costruttore del controllore.
Sarebbe molto meglio e consentirebbe al codice di spostarsi da un luogo all'altro se base_path() è stato utilizzato per generare l'inizio del percorso assoluto anziché digitare tutto. –
ho avuto lo stesso problema qualche giorno fa e si avvicinò con questa soluzione:
La prima cosa che dovete fare è caricare il file in una directory non pubblico. La mia app sta memorizzando le fatture scansionate, quindi le inserirò all'interno di
storage/app/invoices
. Il codice per caricare il file e generando l'url sarebbe:// This goes inside your controller method handling the POST request. $path = $request->file('invoice')->store('invoices'); $url = env('APP_URL') . Illuminate\Support\Facades\Storage::url($path);
L'url restituito dovrebbe tradursi in qualcosa di simile a http://yourdomain.com/storage/invoices/uniquefilename.jpg
Ora è necessario creare un controller che utilizza la
auth middleware
per garantire l'utente è autenticato. Quindi, definire un metodo che acquisisce il file dalla directory privata e lo restituisce come una risposta del file.Che sarebbe:<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Storage; class FileController extends Controller { public function __construct() { $this->middleware('auth'); } public function __invoke($file_path) { if (!Storage::disk('local')->exists($file_path)) { abort(404); } $local_path = config('filesystems.disks.local.root') . DIRECTORY_SEPARATOR . $file_path; return response()->file($local_path); } }
L'ultima cosa è registrare il percorso all'interno del vostro
routes/web.php
del file:Route::get('/storage/{file_name}', 'FileController')->where(['file_name' => '.*'])
Quindi non lo avete, un frammento abbastanza riutilizzabile per tutti i progetti che si occupa con file privati :)
- 1. Come gestire le immagini multipagina in PythonMagick?
- 2. Come gestire le eccezioni e i messaggi di errore in Laravel 5?
- 3. Handle TokenMismatchException in laravel 5
- 4. PHPWord in Laravel 5
- 5. Eccezioni API in Laravel 5
- 6. Laravel 5 hasManyThrough
- 7. Installation Guzzle in Laravel 5
- 8. AngularJS + Laravel 5 Authentication
- 9. Switch in Laravel 5 - Blade
- 10. Creazione utente in Laravel 5
- 11. TRUNCATE ... CASCADE in Laravel 5
- 12. PHP SoapClient in laravel 5
- 13. Come disabilitare i cookie in Laravel 5?
- 14. come autenticare l'API RESTful in Laravel 5?
- 15. Come visualizzare l'ultima query in laravel 5?
- 16. come ottenere corrente timestamp in laravel 5
- 17. Come utilizzare nl2br() in Laravel 5 Blade
- 18. Come rendere HMVC in Laravel 5?
- 19. Laravel 5 Error Reporting Suppression
- 20. laravel 5: MassAssignmentException in model.php
- 21. required_if Laravel 5 validation
- 22. Laravel 5 - Pretty paginator
- 23. laravel 5 ide autocompleto
- 24. Persistendo le sessioni tra i sottodomini in laravel 5
- 25. laravel 5 - impaginazione manuale
- 26. Laravel 5, Visualizza :: Condividi
- 27. laravel 5 custom 404
- 28. Convalida serie laravel 5
- 29. laravel 5: Redirecting woes
- 30. tinyMCE - come gestire i caricamenti di immagini
Grazie per l'aiuto. :) –