Laravel'de Aws S3 kullanımı ile dosya yükleme işlemi

Sizin için önemli olan şeyleri daha fazla keşfedin

Yükleyeceğiniz dosyaları barındırmak için bir S3 Bucket oluşturmak gerekiyor. Bunun için Find Services kısmından S3 yazıp aratıp gelen sonuçlardaki S3 (Scalable Storage in the Cloud)'e tıklayarak yönetim paneline ulaşıyoruz.

 

Create bucket butonuna tıklayıp gerekli alanları dolduruyoruz;

  • Bucket name: İsteğinize göre benzersiz bir isim koymanız gerekiyor. Örneğin ben yb-rest-api koydum.
  • Region: Hizmeti almak istediğiniz bölgeyi seçebilirsiniz. Örneğin ben us-east-1 seçtim.
  • Bucket settings for Block Public Access: Bu kısımda bulunan Block all public access seçeneğindeki tik işaretini kaldırarak Bucket'ı dışarıya açık (public) hale getiriyoruz.
  • Create bucket butonuna basarak işlemi tamamlıyoruz.

 

IAM User oluşturma

 

Bucket'a Laravel projesi üzerinden erişim sağlamak için bir Access Key'e ihtiyaç duyuluyor. Bunun için de IAM (Identity and Access Management) kullanıcı hesabı oluşturmanız gerekiyor. Find Services kısmına IAM yazıp aratıp gelen sonuca tıklayarak yönetim paneline ulaşıyoruz.

 

Soldaki panelden Access management -> Users kısmına giriyoruz. Add user butonuna basıyoruz;

  • User name: İsteğinize göre bir kullanıcı adı girebilirsiniz.
  • Access type: Oluşturacağımız kullanıcının S3 Bucket vb. hizmetlerde erişimi olması için Programmatic access seçeneğine tik işareti koyuyoruz.
  • Sırayla Next: Permissions, Next: Tags, Next: Review, Create user butonlarına basarak işlemi tamamlıyoruz. Elimize Access key ID ve Secret access key ulaşmış oluyor.

 

Laravel projesi üzerinde kullanım

 

Yeni bir Laravel projesi oluşturduktan sonra .env dosyasını açıyoruz. Aws ile ilgili kısımları gerekli şekilde dolduruyoruz;

AWS_ACCESS_KEY_ID=xxxxx AWS_SECRET_ACCESS_KEY=xxxxx AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET=yb-rest-api

  • AWS_ACCESS_KEY_ID: IAM User oluşturma kısmındaki Access key ID
  • AWS_SECRET_ACCESS_KEY: IAM User oluşturma kısmındaki Secret access key
  • AWS_DEFAULT_REGION: S3 Bucket oluşturma kısmındaki Region
  • AWS_BUCKET: S3 Bucket oluşturma kısmındaki Bucket name

 

Terminali açıp şu komutu yazarak, Aws'ye dosya yükleme işlemi için gerekli paketi kuruyoruz;

composer require league/flysystem-aws-s3-v3

 

Şimdi S3 Bucket üzerine bir resim yüklemeyi deneyelim;

 

api.php dosyasını açıp bir Route oluşturuyoruz;

Route::post('upload', 'ImageController@postUpload');

 

Terminali açıp şu komutu yazarak controller dosyasını oluşturuyoruz;

php artisan make:controller ImageController

 

ImageController dosyasına gerekli fonksiyonu yazıyoruz;

public function postUpload() {     $file = request()->file;     Storage::disk('s3')->put('images', $file);    return response()->json(['message' => 'success']); }

Böylece S3 Bucket üzerinde 'images' adında bir klasör oluşacak. İçerisine de gönderdiğimiz dosya yüklenecek.

 

Projeyi ayağa kaldırarak Postman üzerinden test ediyoruz;

php artisan serve

 

Postman üzerinde yapılan istek;

 

Aws üzerinde oluşturduğumuz S3 Bucket'daki dosya;