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 😊
Yazar Hakkında
Kendi Halinde Bir Backend Developer