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 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.
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.
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.
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 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 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!