Laravel ile Storage Folder İçine Dosya Yükleme

Merhaba, 
bu yazıda kısaca Laravel ile dosya yükleme işleminden bahsedeceğim. 

Laravel, dosyaları storage/app dizini içine saklayabiliriz. Bunun sebebi, var olan dosyaları kişilerden gizlemek diyebiliriz. Direkt olarak erişim vermemek diye de söylemek mümkün. 

Peki, bu işlemi yapmak için nasıl bir yol izlemek gerekiyor?

php artisan storage:link

Yukarıdaki komut ile  şunu demiş oluyoruz. Storage/app/public dizinine, public/storage içinden bir link veriyoruz. Böylelikle web üzerinden bu dosyalara erişebileceğiz. 

Dikkat ederseniz, public dizini altında bir tane storage dizini oluştu. Kısa yol vermiş gibi olduk yani. 

Ben, public/storage altına yeni bir klasör daha açtım uploads adında. İçerisine de files ve images adında iki adet yeni klasör oluşturdum. Dosyaları birbirinden ayırmak için.

Şimdi gelelim html kısmına. Diyelim ki formunuzda şöyle bir alanınız olsun. 

<input type = "file" name = "profil_foto" />

 Butona basıldığında seçtiğiniz dosya upload edilecek.

Gelelim controller kısmına. Kullanacağınız alana şöyle bir ifade yazabilirsiniz. İşinizi görecektir ya da kendinize göre düzenleyebilirsiniz.

if ( $req->hasFile('profil_foto') ) {

    // xxx.jpeg
    $yuklenenDosyaTamAdi = $req->file('profil_foto')->getClientOriginalName();

    // xxx
    $yuklenenDosyaninUzantisiAdi= Str::slug(pathinfo($yuklenenDosyaTamAdi, PATHINFO_FILENAME));

    // jpeg
    $yuklenenDosyaUzantisi= $req->file('profil_foto')->getClientOriginalExtension();


    // Basit bir kontrol yapabiliriz
    if ( $yuklenenDosyaUzantisi!= "png" && $yuklenenDosyaUzantisi!= "jpeg" && $yuklenenDosyaUzantisi!= "jpg" ) {

        dd("HATA! Lütfen png, jpeg ya da jpg uzantılı bir dosya yükleyiniz! ");
 }

   // yeniden isimlendirelim.
   $yeniDosyaAdi= date("Y-m-d").".".$yuklenenDosyaUzantisi;

   // gelen istek
   $dosya = $req->file('profil_foto');

   // yuklenecek olan yol
   $filePath = "uploads/public/images/".$yeniDosyaAdi;

   // Asıl is burada. Buraya dikkat.
   Storage::disk('public')->put($filePath, \Illuminate\Support\Facades\File::get($dosya));


}

 

Evet, sanırım anlaşılmıştır. 

Hepsi bu kadar..

2248 Görüntülenme

Yorum Yap