Merhaba,


Bu yazıda Laravel'de Aws S3 kullanımı ile dosya yükleme işleminden bahsedeceğim.


Bunun için öncelikle bir Aws hesabınız olması gerekmekte. Şu linkten kayıt olup 12 aylık ücretsiz kullanımdan faydalanabilirsiniz. Sonrasında oturum açmak için şu linke gidebilirsiniz.


S3 Bucket oluşturma


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;


Umarım yararlı olmuştur.


İyi çalışmalar.