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.
public
direktori. Dengan cara ini Anda akan menghindari overhead karena harus menyusun respons gambar yang bisa ditangani lebih cepat oleh server HTTP.Salah satu opsi adalah membuat tautan simbolis antara subfolder di direktori penyimpanan Anda dan direktori publik.
Sebagai contoh
Ini juga merupakan metode yang digunakan oleh Envoyer , manajer penempatan yang dibangun oleh Taylor Otwell, pengembang Laravel.
sumber
storage
umum, biasanya avatar tidak memerlukan kontrol akses apa pun. Jika tidak diperlukan keamanan menggunakan middleware atau rute apa pun hanya merupakan serangan terbuang ke sumber daya Anda. Ini juga patut dicatat karena Laravel 5.2 ada file "disk" yang terpisah untuk file publik ( laravel.com/docs/5.2/filesystem ) menggunakan symlinks.Menurut Laravel 5.2 docs, file Anda yang dapat diakses publik harus dimasukkan ke dalam direktori
Untuk membuatnya dapat diakses dari web, Anda harus membuat tautan simbolik dari
public/storage
kestorage/app/public
.Sekarang Anda dapat membuat URL dalam tampilan Anda ke file menggunakan bantuan aset:
sumber
Jika Anda berada di windows Anda dapat menjalankan perintah ini di cmd:
dari: http://www.sevenforums.com/tutorials/278262-mklink-create-use-links-windows.html
sumber
Pertama-tama Anda perlu membuat tautan simbolis untuk direktori penyimpanan menggunakan perintah tukang
Maka dalam tampilan apa pun Anda dapat mengakses gambar Anda melalui bantuan url seperti ini.
sumber
Adalah baik untuk menyimpan semua gambar pribadi dan dokumen dalam direktori penyimpanan maka Anda akan memiliki kontrol penuh atas file ether Anda dapat mengizinkan tipe pengguna tertentu untuk mengakses file atau membatasi.
Buat rute / dokumen dan arahkan ke metode pengontrol apa pun:
Kapan Anda akan menekan
localhost:8000/docs
file akan diunduh jika ada.File harus dalam
root/storage/app/users/documents
direktori sesuai dengan kode di atas, ini diuji padaLaravel 5.4
.sumber
Jika Anda ingin memuat sejumlah kecil gambar Privat Anda dapat menyandikan gambar ke base64 dan menggemakannya
<img src="{{$image_data}}">
langsung:Saya sebutkan pribadi karena Anda hanya boleh menggunakan metode ini jika Anda tidak ingin menyimpan gambar yang dapat diakses publik melalui url, sebagai gantinya Anda harus selalu menggunakan cara standar (tautan penyimpanan / folder publik dan sajikan gambar dengan server HTTP).
Waspadai penyandian untuk
base64()
memiliki dua sisi penting:sumber
Jika Anda menggunakan php maka silakan gunakan fungsi symlink php, seperti berikut:
symlink('/home/username/projectname/storage/app/public', '/home/username/public_html/storage')
ubah nama pengguna dan nama proyek menjadi nama yang tepat.
sumber
tanpa nama situs
jika Anda ingin menambahkan nama situs ke contoh untuk menambahkan pada api JSON api
sumber
Jika Anda seperti saya dan Anda entah bagaimana memiliki path file lengkap (saya melakukan beberapa glob () mencocokkan pola pada foto yang diperlukan jadi saya cukup banyak berakhir dengan path file lengkap), dan setup penyimpanan Anda terhubung dengan baik (yaitu sedemikian rupa sehingga jalur Anda miliki string
storage/app/public/
), maka Anda dapat menggunakan hack kecil kotor saya di bawah ini: p)sumber
Jika disk 'lokal' tidak berfungsi untuk Anda maka coba ini:
'default' => env('FILESYSTEM_DRIVER', 'public'),
dariproject_folder/config/filesystem.php
php artisan config:clear
php artisan storage:link
Untuk mendapatkan url gambar yang diunggah, Anda dapat menggunakan ini
Storage::url('iamge_name.jpg');
sumber