The terbaik pendekatan adalah untuk membuat link simbolik seperti @SlateEntropy sangat baik tunjukkan dalam jawaban di bawah ini . Untuk membantu ini, sejak versi 5.3, Laravel menyertakan perintah yang membuatnya sangat mudah dilakukan:
php artisan storage:link
Itu menciptakan symlink dari public/storage
untuk storage/app/public
untuk Anda dan hanya itu yang ada untuk itu. Sekarang semua file di /storage/app/public
dapat diakses melalui tautan seperti:
http://somedomain.com/storage/image.jpg
Jika, karena alasan apa pun, Anda tidak dapat membuat tautan simbolis (mungkin Anda menggunakan hosting bersama, dll.) Atau Anda ingin melindungi beberapa file di balik beberapa logika kontrol akses, ada alternatif memiliki rute khusus yang berbunyi dan melayani gambar. Misalnya rute penutupan sederhana seperti ini:
Route::get('storage/{filename}', function ($filename)
{
$path = storage_path('public/' . $filename);
if (!File::exists($path)) {
abort(404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
});
Sekarang Anda dapat mengakses file seperti yang Anda lakukan jika memiliki symlink:
http://somedomain.com/storage/image.jpg
Jika Anda menggunakan Pustaka Gambar Intervensi, Anda dapat menggunakan response
metode bawaannya untuk membuat segalanya lebih ringkas:
Route::get('storage/{filename}', function ($filename)
{
return Image::make(storage_path('public/' . $filename))->response();
});
PERINGATAN
Ingatlah bahwa dengan menyajikan file secara manual , Anda akan dikenakan penalti kinerja , karena Anda akan melalui seluruh siklus hidup permintaan Laravel untuk membaca dan mengirim konten file, yang jauh lebih lambat daripada server HTTP yang menanganinya.