Laravel Storage Kullanımı -2-

Laravel Storage Kullanımı -2-

Hepinize merhaba dostlarım😊. Blogsuz geçen ve yoğun sağlık sorunlarımın olduğu bir haftanın ardından yine ben 😊. Malum kış mevsimi geldi kapımıza dayandı önlem almakta fayda var ve ben önlem alamadım 😅. Aman dikkat edin dostlarım benden demesi

Bu haftaki blog konumuza gelecek olursak dostlarım daha öncesinde size sözünü vermiş olduğum "Laravel Storage Kullanımı" başlıklı serimizin 2. kısmını bu sefer inceleyeceğiz 😉.

Şimdi bazı dostlarımın içinden şunları dediğini duyar gibiyim

Az buçuk zorlayacaksınız galiba hocam biz öyle sezdik 😅

Yok yok dostlarım kendinize öyle korku asla vermeyin. Biliyorum öğrenme süreci zahmetli, meşakkatli geçer bu her insan için bu şekildedir. Ama siz bu korkunun üzerine ne kadar giderseniz bu süreç sizler için çok başarılı bir şekilde sonuçlanacaktır sadece sonuna kadar başarıyı kovalayın 😊

Artık sözü daha fazla uzatmadan (Çenem daha çok düşmeden yani 😅) konumuza girişimizi yapalım diyorum. O halde proje çatılarımızı kuralım ve hemen hızlıca kodlama işlemlerimize geçelim

Çoklu Dosya Yükleme

Eveeeet dostlaırm geldik artık Storage işlemlerinde özellikle büyük projelerde olmazsa olmaz kullanılan bir işleme 😊. Çalıştığım kurumda bile bu derece önem arz eden ve sisteme entegre ettirilen bu "Çoklu Dosya Yükleme" olayının ayarlanmasına gelin bir göz atalım 😊. Yalnız şu ayarları hızlıca bir gerçekleştirelim dostlarım. Öncelikle .env dosyamıza gelip

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=public  ## bu kısmı public olarak ayarlayalım
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

şeklinde kodlarımızı yazalım. Daha sonrasında ise terminalimize gelip

php artisan storage:link

komutumuzu yazalım. Bu kodları yazdıktan sonra ise dostlarım çoklu dosya yükleme işlemlerini gerçekleştirelim

Öncelikle dostlarım herhangi bir controller açmamıza hiç gerek yok. Bunları routes klasörü altından web.php içerisinden ayarlayabiliriz. Hemen o kısmın da kodlarını yazalım hızlıca. Web.php dosyamızın içerisine gelip

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    echo "<form method='post' action='/photo-upload' enctype='multipart/form-data'>".csrf_field()."
            <label>Dosya Yükle</label>
            <br>
            <input type='file' name='photos[]' multiple>
            <br><br>
            <button type='submit'>Gönder</button>
        </form>";
});

Route::post('/photo-upload',function (\Illuminate\Http\Request $request){
    $photos = $request->photos;
    if (!empty($photos)){
        foreach ($photos as $photo){
            $file_name = uniqid().".".$photo->getClientOriginalExtension();
            $photo->storeAs("photos",$file_name);
        }
    }
});

şeklinde kodlarımızı yazalım. Bu kısma kadar tamamız 😊. Terminalimize gelip

php artisan serve

komutunu yazdığımızda karşımıza gelecek olan sonuç

şeklinde bir çıktı karşımıza gelecektir. Bu kısma kadar tamamız dostlarım. Sonrasında ise storage/app/public klasörümüzün içerisinde photos diye bir klasör açalım. Bu bu şekilde illa "photos" olacak diye bir kural yok dostlarım ben kodlamada bu şekilde klasör oluşturduğum için bunu bu şekilde ayarladım. Siz istediğiniz şekilde ayarlayabilirsiniz tamamen size kalmış 😊.

Bu şekilde ayarladıktan sonra ise dostlarım 3-5 tane dosya seçip yükle dediğimizde karşımıza boş ekran gelecektir yani herhangi bir view tasarlamadık. Burada size gösterdiğim direkt olarak backend yapısıdır 😊. 

Boş ekran karşımıza geldikten sonra storage/app/public içerisindeki photos klasörüne geldiğimizde bizi karşılayan görüntü

şeklinde dosyalarımızın başarılı bir şekilde yüklenmiş olduğunu görüyoruz 😊. İşlem bu kadar basit dostlarım. Gelelim bir diğer konumuza

Dosya Kontrolü

Özellikle download işlemlerinde ve update işlemlerinde kontrol yapmamız gerekiyor bunu biliyorsunuz. Bazı dostlarımın aklında olan soruyu da gündeme getirmek istiyorum yeri gelmişken

Hocam tamam dosya kontrolü yaparız onu anlıyoruz da update işleminde neden bu kontrolü yapmamız gerekli bunu anlayamadık

şeklinde sorular oluyor bazen. Hemen cevaplayayım dostlarım

Öncelikle download işlemlerinden başlayacak olursak dostlarım olmayan bir dosyayı direkt olarak indirtme işlemi yaptığımızda sistem bize hata fırlatacaktır. Yani diyecektir ki

Kardeşim bu dosya yok sen bunu indirmek istiyorsun ama dosya yok yani ne yapmaya çalışıyorsun 😅

diyecektir. Tabi bir makina olduğu için insan gibi konuşamaz direkt hata kodu fırlatır 😊. İndirme işlemlerinde yani dediğim gibi dosya kontrolü yapmak önemlidir

 

Upload işlemlerinde kontrol yapma olayına gelecek olursak dostlarım bu biraz değişebilir yani download olayındaki gibi zorunlu olmayabilir bazen. Mesela bir resi yüklediniz veri tabanından yolu güncellediniz. Daha sonra bir resim daha yüklediniz ama bu resmi kontrol ettirip sildirmek yerine hiçbir şey yapmadınız direkt eklediniz ve tekrardan veri tabanından güncellediniz. Bu durum normal çalışır bir süre ama belli süre sonrasında ise hostingin şişmesine neden olur. Bunun da önüne düzenli yedek alınarak geçilebilir 😊

Ama bu güne kadar neredeyse hemen hemen gördüğüm her sektörde eski dosyanın kontrol edilip silinmesi ve daha sonra yeni dosyanın yüklenmesi olayları şeklinde bu süreç ilerliyor dostlarım 😊

 

Çenem çok düştü dostlrım kusuruma bakmayın. Dosya kontrolü işlemlerine de hızlıca değinelim 😊. Bunun için ben harici bir rotasyon oluşturuyorum dostlarım

<?php

Route::get('exists',function (){
    dd(\Illuminate\Support\Facades\Storage::exists('photos/63352a4adafc5.png'));
});

şeklinde kodumuzu yazdık dostlarım. Bu kodu yazdıktan sonra dostlarım storage/app/public içerisinde photos klasörünün altında "63352a4adafc5.png" dosyası araştırılacak. Eğer bulunursa ekranımıza

true

sonucu dönecektir. Yok bu dosya bulunamaz ise ekranımıza

false

sonucu dönecektir. Kullanımı bu kadar basit 😉.

Bu arada dostlarım bu işlemlerin cloud ve amazon s3 tarafında kullanımları da mevcut dökümandan baktım da daha önce tam kullanmadığım için sizlere yanlış bilgiler de vermek istemem. Bunları da ilerleyen zamanlarda araştırmalarım güzel sonuç verirse sizlere aktaracağım 😊

Dosya Oluşturma

Eveeet dostlarım geldik bir diğer konumuza daha 😊. Özellikle CRM projelerinde sıklıkla karşıma çıkan konulardan birisidir bu 😊. Örneğin bir proje üzerinde kullanıcılar not ekliyor ve bu notların da sunucu tarafında bir dosyaya not edildiği durumlar olabiliyor. Bu ve bunun gibi durumlarda sunucu tarafında dosya oluşturulması gibi işlemler yazılımcıyı selamlıyor 😊. Pekiiii bu işlem için nasıl bir kod yazılması gerekiyor gelin hemen ona bakalım dostlarım

<?php

Route::get('put',function (){
    \Illuminate\Support\Facades\Storage::disk('public')->put('files/a.txt','MFSoftware Blog');
});

şeklinde kodlarımızı yazdık dostlarım. Burada ufak noktalardan değinmek istiyorum dostlarım

  • disk:  Burada hangi disk üzerinde çalışıyorsak onu yazacağız. Biz burada public olan filesysem driver üzerinde çalıştığımız için onu seçtik
  • put: Burada oluşturacağımız dosyanın adı ve içerisine ne ekleyeceğimizi yazacağız. 2 parametre mecbur alacaktır

şeklinde kodlarımızı yazdık. Kodu çalıştırdğımızda ise storage/app/public içerisinde files klasörünün altında a.txt klasörü oluşturulacaktır. İçerisinde ise

MFSoftware Blog

şeklinde bizim belirtmiş olduğumuz metin bulunacaktır. Her şey sorunsuz gidiyor işte bu kadar dostlarım 😊. Gelelim bir diğer kısma

Dosya İçerisine Veri Ekleme

Gün geldi ve oluşturduğumuz dosyamızın içerisine veri eklememiz gerekti dostlarım. Bu durumda uzun bir işleme hiç ama hiç gerek yok. 

Özellikle dostlarım bu storage olayları ile yeni yeni tanışan dostlarımız varsa dosyayı aç içerisine kaydet vs gibi olaylar gibi meşakkatli bir olay var zannedebilir ama kendilerini kasmamasını isterim ben o dostlarımın. İşlemi anlatacağım ve içinizden "Cidden bu kadar kolay mı" diyeceksiniz. Hemen kodları yazalım hızlıca

<?php

Route::get('append',function (){
    \Illuminate\Support\Facades\Storage::append('files/a.txt',"Seyyar Yazılımcı");
});

şeklinde kodlarımızı yazdık dostlarım. Bu kodu yazıp çalıştırdığımızda a.txt içeriği

MFSoftware Blog
Seyyar Yazılımcı

 şeklinde olacaktır dostlarım. Dosya içerisine metin ekleme işlemi de başarılı bir şekilde sonuçlandı 😊. İşte bu kadar basit dostlarım 😊

Dosya İndirme

İşte o güzel işlem. İşte ooooo benim bir tanem, göz bebeğim olan işlem. İşteee oooooo benim aşkım dediğim ve kodlarken aşırı mutlu olduğum işlem olan dosya indirme işlemini kodlayacağız dostlarım. Lakin kodlamadan önce söyleyeyim size. Bu dosya indirme kodu 3 parametre alıyor. Birisi zorunlu, diğer 2 tanesi ise opsiyonel şekildedir. Hızlıca buraya maddeler halinde bir yazayım

  • path ---> dosyanın yolu (zorunlu)
  • name ---> inen dosyanın adı ne olsun (zorunlu değil)
  • header ---> indirme işlemi için header bilgileri (xml olarak mı json olarak mı insin bilgileri)

şeklinde bizden 1 adet zorunlu, 2 adet de zorunlu olmayan bilgileri istiyor. Bu kısma kadar tamamız dostlarım. Şimdi gelelim kodlarımızı yazalım

<?php

Route::get('download',function (){
    return \Illuminate\Support\Facades\Storage::download('files/a.txt','file.txt');
});

şeklinde kodlarımızı yazdık dostlarım. Kodu çalıştırdığımızda bizim oluşturduğumuz a.txt dosyası file.txt olarak inecektir. İndirilen dosyayı incelediğimizde ise karşımıza gelecek olan çıktı

MFSoftware Blog
Seyyar Yazılımcı

şeklinde olacaktır 😊. Her şey başarılı bir şekilde ilerledi dostlarım 😊

 

Eveeeeet dostlarım 😊 Bu makalemde sizlere elimden geldiğince dilim döndüğünce "Laravel Storage Kullanımı" serimizin 2. kısmını anlattım. Umarım faydalı olmuşumdur. Konu başlarda biraz karmaşık veya zor gelebilir dostlarım anlıyorum. Özellikle öğrenme süreci içerisinde bu gibi sonuçlarla karşılaşmanız son derece doğaldır. Bu süreç içerisinde sizlerden istediğim tek şey "İstikrarlı ve Azimli Olmalısınız, Bolca Pratik Yapmalısınız 😊". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır.

Aynı zamanda 25 Aralık 2022 de kurmuş olduğum seyyaryazilimci.com soru cevap sitesi de yayında dostlarım haberiniz olsun. Her zaman dediğim gibi sorular ve cevaplar belirli bir süre admin onayından geçerek sistem üzerinde yayınlanmaktadır dostlarım bilginiz olsun.

Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim 😊

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıVue.js Data Binding İşlemi
Sonraki YazıLaravel Storage Kullanımı -3-
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz