design

Laravel’de File Upload ve Storage Yönetimi

March 23, 2025


Merhaba arkadaşlar, bugün sizlere Laravel’de dosya yükleme (file upload) ve depolama (storage) yönetimi konularını anlatacağım. Web uygulamalarında kullanıcıların dosya yüklemesi oldukça yaygın bir ihtiyaçtır. Laravel, bu süreci kolaylaştıran ve güvenli hale getiren birçok özellik sunar. Gelin, bu konuları adım adım inceleyelim.


Laravel’de Dosya Yükleme İşlemleri

Laravel’de dosya yükleme işlemleri, Request sınıfı ve Storage facade’u ile kolayca gerçekleştirilebilir. Öncelikle, bir form oluşturarak kullanıcıların dosya yüklemesini sağlayalım.


Örnek Dosya Yükleme Formu:

<form method="POST" action="/upload" enctype="multipart/form-data">
    @csrf
    <div>
        <label for="file">Dosya Seçin:</label>
        <input type="file" id="file" name="file">
    </div>
    <button type="submit">Yükle</button>
</form>



Bu formda, enctype="multipart/form-data" özelliği, dosya yükleme işlemi için gereklidir. Ayrıca, @csrf direktifi ile CSRF koruması sağlanır.

Dosya Yükleme İşlemini İşleme

Formdan gelen dosyayı işlemek için bir route ve controller oluşturmanız gerekiyor. Örneğin, routes/web.php dosyasına bir route ekleyebilirsiniz:


Route Tanımı:

Route::post('/upload', [FileController::class, 'upload']);

Ardından, FileController içinde upload metodunu oluşturabilirsiniz. Bu metod, formdan gelen dosyayı alır ve doğrulama işlemlerini gerçekleştirir.


Controller Kodu:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

public function upload(Request $request)
{
    // Dosya doğrulama
    $request->validate([
        'file' => 'required|file|max:2048', // Maksimum 2MB
    ]);

    // Dosyayı yükleme
    $path = $request->file('file')->store('uploads');

    // Başarılı yükleme sonrası yönlendirme
    return redirect('/')->with('success', 'Dosya başarıyla yüklendi: ' . $path);
}


Bu kodda, $request->validate() metodu ile dosya doğrulaması yapılır. Dosya, store() metodu ile storage/app/uploads dizinine kaydedilir.

Dosya Depolama ve Storage Yönetimi

Laravel, dosyaları depolamak için Storage facade’unu kullanır. Varsayılan olarak, dosyalar storage/app dizinine kaydedilir. Ancak, dosyaları farklı disklerde (örneğin, Amazon S3 veya FTP) depolamak için config/filesystems.php dosyasını yapılandırabilirsiniz.


Örnek Dosya Yükleme ve Depolama:


use Illuminate\Support\Facades\Storage;

public function upload(Request $request)
{
    $request->validate([
        'file' => 'required|file|max:2048',
    ]);

    // Dosyayı 'public' diskine yükleme
    $path = $request->file('file')->store('uploads', 'public');

    return redirect('/')->with('success', 'Dosya başarıyla yüklendi: ' . $path);
}


Bu kodda, dosya public diskine yüklenir. Bu disk, storage/app/public dizinine karşılık gelir ve dosyalara web üzerinden erişim sağlar.


Dosyalara Web Üzerinden Erişim

Eğer dosyalara web üzerinden erişim sağlamak istiyorsanız, storage:link Artisan komutunu kullanarak public/storage dizinine sembolik bir bağlantı oluşturabilirsiniz.


Sembolik Bağlantı Oluşturma:

php artisan storage:link

Bu komut, public/storage dizinini storage/app/public dizinine bağlar. Örneğin, yüklenen bir dosyaya şu şekilde erişebilirsiniz:


<img src="{{ asset('storage/uploads/filename.jpg') }}" alt="Yüklenen Dosya">



Dosya Doğrulama ve Güvenlik

Dosya yükleme işlemlerinde güvenlik oldukça önemlidir. Laravel, dosya doğrulama işlemleri için birçok kural sunar. Örneğin:

  • required: Dosyanın yüklenmesi zorunludur.
  • file: Dosyanın geçerli bir dosya olması gerekir.
  • mimes:jpg,png,pdf: Dosyanın belirli bir türde olması gerekir.
  • max:2048: Dosyanın maksimum 2MB boyutunda olması gerekir.


Örnek Doğrulama:

$request->validate([
    'file' => 'required|file|mimes:jpg,png,pdf|max:2048',
]);


Bu kod, yalnızca JPG, PNG veya PDF dosyalarının yüklenmesine izin verir ve dosya boyutunu 2MB ile sınırlar.

Laravel’de Dosya Yükleme ve Storage’ın Avantajları

  • Kolay Kullanım: Laravel’in dosya yükleme ve depolama sistemi, geliştiricilere kolaylık sağlar.
  • Güvenlik: Dosya doğrulama ve güvenlik önlemleri sayesinde, güvenli dosya yükleme işlemleri gerçekleştirebilirsiniz.
  • Esneklik: Farklı depolama diskleri kullanarak, dosyaları farklı ortamlarda saklayabilirsiniz.


Laravel’de dosya yükleme ve storage yönetimi, web uygulamalarının vazgeçilmez bir parçasıdır. Eğer kullanıcıların dosya yüklemesini sağlamak ve bu dosyaları güvenli bir şekilde depolamak istiyorsanız, Laravel’in sunduğu bu özellikleri mutlaka kullanmalısınız. Bir sonraki yazımda, Laravel’de Event ve Listener Kullanımı konusuna değineceğim. Görüşmek üzere!


1 + 0 =