Laravel

Laravel’de File Storage (Dosya Depolama) Kullanımı

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 sunucuda storage/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.
Web Doktoru

Matematikçi, Adli Bilişim Uzmanı, Bil. Yük. Müh. Full Stack Developer

Paylaş
Yayınlayan
Web Doktoru

Son Gönderiler

Mobil Uyumlu Web Tasarım Rehberi: Responsive Design ile Kullanıcı Deneyimini Mükemmelleştirin

Web trafiğinin %70'inden fazlası artık mobil cihazlardan geliyor. Google'ın mobil öncelikli indekslemesi (mobile-first indexing) 2026'da tam bir…

9 Haziran 2026

WordPress Bakım Hizmeti Neden Gerekli? Site Sahiplerinin Yapmaması Gereken 8 Hata

WordPress siteniz canlıya alındıktan sonra iş bitmiyor asıl iş o zaman başlıyor. Pek çok işletme…

5 Haziran 2026

Mobil Uygulama mı Web Uygulaması mı? İşletmeniz İçin Doğru Tercih Rehberi

İşletmeniz için dijital bir çözüm geliştirmek istediğinizde, karşılaşacağınız ilk soru genellikle budur: "Mobil uygulama mı…

3 Haziran 2026

WordPress Site Hız ve Performans Optimizasyonu: Sayfa Yüklenme Süresini 3 Saniyenin Altına İndirin

Web sitesi hızı, 2026'da sadece bir teknik detay değil — doğrudan iş sonuçlarını etkileyen kritik…

1 Haziran 2026

Sosyal Medya Pazarlama Rehberi 2026: Platformlara Göre Strateji ve Büyüme Taktikleri

Sosyal medya, 2026 itibarıyla 5.2 milyar aktif kullanıcıya ulaşmış durumda. Türkiye'de ise 65 milyondan fazla…

29 Mayıs 2026

İçerik Pazarlama Stratejileri 2026: Dönüşüm Oranını Artıran 10 Adım

"İçerik kraldır" diyerek başlamak bu noktada klasik kaçabilir ama gerçek değişmiyor: doğru içerik, doğru kişilere,…

27 Mayıs 2026