Laravel, dosya yükleme ve depolama işlemleri için güçlü bir Storage (Dosya Depolama) mekanizması sunar. Bu mekanizma, yerel dosya sisteminden Amazon S3, FTP, Dropbox gibi harici depolama hizmetlerine kadar birçok farklı sürücüyü destekler. Bu makalede, Laravel’in Storage sistemini nasıl kullanacağınızı adım adım öğreneceksiniz.
1️⃣ Storage Yapılandırması
Laravel, dosya depolama işlemlerini config/filesystems.php
dosyası üzerinden yönetir. Bu dosya, farklı depolama disklerini ve sürücülerini tanımlamanızı sağlar. Varsayılan olarak, Laravel aşağıdaki diskleri sunar:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
],
],
local
: Dosyaları yerel sunucudastorage/app
klasörüne kaydeder.public
: Dosyalarıstorage/app/public
klasörüne kaydeder ve bu dosyalara dışarıdan erişim sağlar.s3
: Dosyaları Amazon S3 üzerinde depolar.
Varsayılan Depolama Diskini Değiştirme
Laravel, varsayılan olarak local
diskini kullanır. Eğer public
veya s3
gibi bir disk kullanmak isterseniz, .env
dosyanızda aşağıdaki ayarı değiştirebilirsiniz:
FILESYSTEM_DISK=public
2️⃣ Dosya Yükleme (Upload İşlemi)
Dosya yüklemek için, request
içindeki dosyayı Storage
sınıfı ile kaydedebilirsiniz. Örneğin, bir dosya yükleme işlemi şu şekilde gerçekleştirilebilir:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
public function upload(Request $request) {
$path = $request->file('file')->store('uploads');
return response()->json(['path' => $path]);
}
Bu kod, yüklenen dosyayı storage/app/uploads/
klasörüne kaydeder.
3️⃣ Belirli Disk Üzerine Dosya Kaydetme
Eğer farklı bir disk kullanmak isterseniz, store()
metoduna ikinci parametre olarak disk adını belirtebilirsiniz:
$request->file('file')->store('uploads', 'public');
Bu, dosyayı storage/app/public/uploads/
klasörüne kaydeder.
4️⃣ Dosya İsimlendirme (Custom File Name)
Eğer özel bir dosya adı belirlemek isterseniz, storeAs()
metodunu kullanabilirsiniz:
$request->file('file')->storeAs('uploads', 'myfile.jpg', 'public');
Bu, dosyayı storage/app/public/uploads/myfile.jpg
olarak kaydeder.
5️⃣ Yüklenen Dosyaya Erişme
Dosya URL’sini almak için Storage::url()
metodunu kullanabilirsiniz:
$url = Storage::url('uploads/myfile.jpg');
echo $url;
// Çıktı: http://localhost/storage/uploads/myfile.jpg
Eğer local
disk kullanıyorsanız, php artisan storage:link
komutunu çalıştırarak storage
klasörünü public/storage
ile ilişkilendirmelisiniz:
php artisan storage:link
Bu işlem, storage/app/public
klasöründeki dosyalara public/storage
üzerinden erişim sağlar.
6️⃣ Dosya Silme
Bir dosyayı silmek için delete()
metodunu kullanabilirsiniz:
Storage::delete('uploads/myfile.jpg');
Birden fazla dosyayı aynı anda silmek isterseniz:
Storage::delete(['file1.jpg', 'file2.jpg']);
7️⃣ Dosya Kontrolleri (Var mı?)
Bir dosyanın olup olmadığını kontrol etmek için exists()
metodunu kullanabilirsiniz:
if (Storage::exists('uploads/myfile.jpg')) {
echo "Dosya mevcut!";
} else {
echo "Dosya bulunamadı!";
}
8️⃣ Dosya İçeriğini Okuma & Yazma
Dosya İçeriğini Okuma
Bir dosyanın içeriğini okumak için get()
metodunu kullanabilirsiniz:
$content = Storage::get('uploads/myfile.txt');
echo $content;
Dosya İçeriğine Yazma
Bir dosyaya içerik yazmak için put()
metodunu kullanabilirsiniz:
Storage::put('uploads/myfile.txt', 'Merhaba Laravel!');
Dosya İçeriğine Ekleme (Append)
Bir dosyanın içeriğine ekleme yapmak için append()
metodunu kullanabilirsiniz:
Storage::append('uploads/myfile.txt', 'Yeni bir satır!');
Dosya İçeriğini Değiştirme (Override)
Bir dosyanın içeriğini tamamen değiştirmek için replace()
metodunu kullanabilirsiniz:
Storage::replace('uploads/myfile.txt', 'Bu tamamen yeni bir içerik.');
9️⃣ Public Disk Kullanımı (Dışarı Açık Dosyalar İçin)
Eğer dosyalarınızın dışarıdan erişilebilir olmasını istiyorsanız, public
diskini kullanmalısınız:
$request->file('file')->store('uploads', 'public');
Dosyayı erişilebilir yapmak için Storage::url()
metodunu kullanabilirsiniz:
echo Storage::url('uploads/myfile.jpg');
// Çıktı: http://localhost/storage/uploads/myfile.jpg
🔟 Amazon S3 Kullanımı
Eğer dosyaları Amazon S3 üzerinde saklamak istiyorsanız, AWS kimlik bilgilerinizi .env
dosyanıza ekleyin:
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket-name
FILESYSTEM_DISK=s3
Daha sonra dosya yüklemek için şu kodu kullanabilirsiniz:
$request->file('file')->store('uploads', 's3');
Ve dosyanın URL’sini almak için:
$url = Storage::disk('s3')->url('uploads/myfile.jpg');
Sonuç
Laravel’in Storage mekanizması, dosya yönetimi için esnek ve güçlü bir çözüm sunar. Bu makalede, dosya yükleme, silme, okuma ve yazma işlemlerini nasıl gerçekleştireceğinizi öğrendiniz. Ayrıca, yerel dosya sisteminden Amazon S3 gibi harici depolama hizmetlerine kadar farklı sürücüleri nasıl kullanacağınızı inceledik.
Eğer Laravel ile web uygulamaları geliştiriyorsanız, bu özellikleri kullanarak dosya yönetimini kolayca gerçekleştirebilir ve uygulamanızın işlevselliğini artırabilirsiniz. 🚀
Ek Konu Başlıkları:
- Dosya İzinleri ve Güvenlik: Dosyaların erişim izinlerini yönetme.
- Dosya Boyutu ve Tür Kontrolü: Yüklenen dosyaların boyutunu ve türünü kontrol etme.
- Harici Depolama Hizmetleri: FTP, Dropbox gibi diğer harici depolama hizmetlerini kullanma.
- Dosya Yönetim Paneli: Dosyaları yönetmek için bir yönetim paneli oluşturma.
Laravel Eğitimi Konular
- Laravel Nedir ve Neden Kullanılmalı?
- Laravel Kurulumu (Composer ile Adım Adım Rehber)
- Laravel Proje Yapısı ve MVC Mimarisi
- Laravel Routing ve Controller Kullanımı
- Laravel Middleware Kullanımı
- API isteklerinde middleware kullanımı
- Laravel Migration ve Seeder Kullanımı
- Laravel Factory ve Faker ile Test Verisi Üretme
- Laravel’de API Kullanımı ve Token Bazlı Authentication
- Laravel Rol ve Yetkilendirme İşlemleri
- Laravel’de Cache ve Performans Optimizasyonu
- Laravel’de Queue (Kuyruk) Kullanımı ve Arka Plan İşlemleri
- Laravel Event & Listener Kullanımı
- Laravel’de Scheduler (Zamanlanmış Görevler) Kullanımı: Otomatik İşlemler ve Zaman Yönetimi
- Laravel’de Test Driven Development (TDD) ve Test Yazımı