﻿
{"id":25760,"date":"2022-11-06T11:04:19","date_gmt":"2022-11-06T11:04:19","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=25760"},"modified":"2022-11-06T11:06:02","modified_gmt":"2022-11-06T11:06:02","slug":"asp-net-core-aws-s3-ile-dosya-islemleri-gerceklestirme-upload-download-delete-files","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-aws-s3-ile-dosya-islemleri-gerceklestirme-upload-download-delete-files\/","title":{"rendered":"Asp.NET Core &#8211; AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme | Upload &#8211; Download &#8211; Delete Files"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, Amazon&#8217;un nesne depolama alan\u0131 olarak sundu\u011fu <em>Amazon Simple Storage Service (Amazon S3)<\/em>&#8216;i kullanarak dosya y\u00fckleme, silme ve indirme operasyonlar\u0131n\u0131 Asp.NET Core uygulamas\u0131 e\u015fli\u011finde ger\u00e7ekle\u015ftirecek ve b\u00f6ylece Amazon S3 hakk\u0131nda hem bilgi sahibi olacak hem de AWS Console, AWS CLI, Credentials Store vs. gibi yeteneklerini tecr\u00fcbe etmi\u015f olaca\u011f\u0131z. O halde buyurun ba\u015flayal\u0131m&#8230;<\/p>\n<h4>Amazon S3 Nedir?<\/h4>\n<p>\u0130lk olarak kullanaca\u011f\u0131m\u0131z bu dev servisin ne oldu\u011funu izah ederek ba\u015flayal\u0131m.<\/p>\n<p>Amazon S3(Simple Storage Service), Amazon&#8217;un d\u00fcnyaya yay\u0131lm\u0131\u015f sunucular\u0131 sayesinde ultra y\u00fcksek kullan\u0131labilirlik ile ki\u015finin depolama ihtiya\u00e7lar\u0131 i\u00e7in s\u00fcper \u00f6l\u00e7eklenebilir bir nesne depolama hizmetidir. Bu depolama hizmetinin yan\u0131 s\u0131ra i\u015fletme hedeflerine en uygun \u015fekilde \u00e7al\u0131\u015fmalar ger\u00e7ekle\u015ftirebilmeniz i\u00e7in depolanan veriler \u00fczerinde optimizasyonlar\u0131n ger\u00e7ekle\u015ftirilebilmesi, g\u00fcvenceye al\u0131nabilmesi ve gerekti\u011fi taktirde organize edilebilmesi i\u00e7in t\u00fcrl\u00fc y\u00f6netimsel \u00f6zellikle sunmaktad\u0131r.<\/p>\n<blockquote><p>Amazon S3 hakk\u0131nda daha detayl\u0131 bilgi i\u00e7in <a href=\"https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/Welcome.html\" rel=\"noopener\" target=\"_blank\">buraya<\/a> t\u0131klay\u0131n\u0131z.<\/p><\/blockquote>\n<p>Bu i\u00e7eri\u011fe verimli bir \u015fekilde devam edebilmek i\u00e7in Amazon S3&#8217;\u00fcn Buckets, Objects ve Permissions kavramlar\u0131 hakk\u0131nda temel bilgilere sahip olunmas\u0131 gerekmektedir. Bunun i\u00e7in \u015fimdiden k\u00fc\u00e7\u00fck tan\u0131mlarda bulunman\u0131n, i\u00e7eri\u011fimizin sonraki sat\u0131rlar\u0131 i\u00e7in ayd\u0131nlat\u0131c\u0131 etkisi olacakt\u0131r kanaatindeyim;<\/p>\n<ul>\n<li>Buckets; objects\/nesneler&#8217;in yerle\u015ftirilece\u011fi klas\u00f6rlerdir.<\/li>\n<li>Objects; dosyalar\u0131 tarif eder. Default olarak nesneler public de\u011fildir. Yani d\u0131\u015far\u0131dan eri\u015fim g\u00f6sterilemez. Bunun i\u00e7in Identity And Access Management&#8217;\u0131 kullanarak Amazon S3 servisine tam eri\u015fim haklar\u0131na sahip bir kullan\u0131c\u0131 olu\u015fturup dosya eri\u015fimlerini bu kullan\u0131c\u0131 \u00fczerinden sa\u011flayaca\u011f\u0131z.<\/li>\n<li>Permissions; object&#8217;lere eri\u015fim i\u00e7in kullanaca\u011f\u0131m\u0131z yetkilerdir.<\/li>\n<\/ul>\n<p>Bu i\u00e7eri\u011fi takip edebilmeniz i\u00e7in ekstradan AWS hesab\u0131na ihtiyac\u0131n\u0131z olacakt\u0131r. Bunun i\u00e7in <a href=\"https:\/\/aws.amazon.com\/tr\/s3\/\" rel=\"noopener\" target=\"_blank\">buraya<\/a> t\u0131klayarak olduk\u00e7a basit bir \u015fekilde kayd\u0131n\u0131z\u0131 \u00fccretsiz yapabilir ve test ama\u00e7l\u0131 S3 servislerini kullanabilmek i\u00e7in 12 ay boyunca 5 GB&#8217;a kadar veriyle \u00e7al\u0131\u015fma \u015fans\u0131n\u0131 elde edebilirsiniz.<\/p>\n<p>\u015eimdi gelin ad\u0131m ad\u0131m k\u00e2h AWS ortam\u0131n\u0131 konfig\u00fcre ederek, k\u00e2h Asp.NET Core uygulamas\u0131n\u0131 geli\u015ftirerek ilerlemeye ba\u015flayal\u0131m.<\/p>\n<h4>AWS IAM Arac\u0131l\u0131\u011f\u0131yla Kullan\u0131c\u0131 Olu\u015fturma ve Access Key Generate Etme<\/h4>\n<p>Her \u015feyden \u00f6nce ilk gereksinim olarak Asp.NET Core uygulamas\u0131 ile AWS S3&#8217;e eri\u015febilmek i\u00e7in gerekli g\u00fcvenlik i\u015flemlerini ger\u00e7ekle\u015ftirmekte fayda g\u00f6rmekteyim.<\/p>\n<p><em>IAM(Identity and Access Management)<\/em>, AWS kaynaklar\u0131na eri\u015fimi g\u00fcvenli bir \u015fekilde kontrol etmemize yard\u0131mc\u0131 olan bir servistir. A\u00e7\u0131lan oturumlar\u0131, kaynaklar\u0131 kullanmak i\u00e7in yetkilendirilen kullan\u0131c\u0131lar\u0131 vs. denetlememizi sa\u011flamaktad\u0131r.<\/p>\n<p>Bu servisi kullanabilmek i\u00e7in AWS Console&#8217;da a\u015fa\u011f\u0131daki gibi &#8216;IAM&#8217; aramas\u0131 yap\u0131n\u0131z ve ard\u0131ndan gelen IAM servisini a\u00e7\u0131n\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.gif\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"800\" height=\"466\" class=\"aligncenter size-full wp-image-25765\" \/><\/a>\u015eimdi gayemiz AWS S3 servisini kullanabilecek tam eri\u015fim haklar\u0131na sahip yeni bir kullan\u0131c\u0131 olu\u015fturmakt\u0131r. Bunun i\u00e7in sol men\u00fcdeki &#8216;Users&#8217; sekmesine ve hemen ard\u0131ndan sa\u011fdaki mavi &#8216;Add users&#8217; butonuna t\u0131klay\u0131n\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.gif\" alt=\"\" width=\"800\" height=\"389\" class=\"aligncenter size-full wp-image-25768\" \/><\/a><br \/>\nBir sonraki a\u00e7\u0131lan formda kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 belirleyiniz ve a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi &#8216;<strong>Access key &#8211; Programmatic access<\/strong>&#8216; kutucu\u011funu se\u00e7ti\u011finizden emin olunuz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"976\" height=\"474\" class=\"aligncenter size-full wp-image-25770\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.png 976w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-300x146.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-768x373.png 768w\" sizes=\"auto, (max-width: 976px) 100vw, 976px\" \/><\/a>Bu i\u015flemden sonra sa\u011f alt k\u00f6\u015fedeki mavi &#8216;Next: Permissions&#8217; butonuna t\u0131klay\u0131n\u0131z.<br \/>\nTabi akabinde bu olu\u015fturulacak kullan\u0131c\u0131ya politikalar\/izinler atanmal\u0131d\u0131r. Bunun i\u00e7in mevcut politikalardan istifade edebiliriz. Bu i\u015flem i\u00e7in a\u015fa\u011f\u0131daki gibi &#8216;Attach existing policies directly&#8217; sekmesine t\u0131klay\u0131n\u0131z ve &#8216;s3&#8217; aramas\u0131 yaparak &#8216;AmazonS3FullAccess&#8217; politikas\u0131n\u0131 ekleyiniz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.gif\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"800\" height=\"410\" class=\"aligncenter size-full wp-image-25772\" \/><\/a>\u0130sterseniz bu politikan\u0131n d\u0131\u015f\u0131nda daha fazlas\u0131n\u0131 kullan\u0131c\u0131yla ili\u015fkilendirebilirsiniz. Ancak bu i\u00e7eri\u011fimiz i\u00e7in bu politikan\u0131n eklenmesi yeterli olacakt\u0131r.<\/p>\n<p>Bir sonraki ekranda ise kullan\u0131c\u0131ya etiket ekleme se\u00e7ene\u011fi sunulmaktad\u0131r. Genellikle kullan\u0131c\u0131 faturaland\u0131rma ve izleme ama\u00e7l\u0131 bu etiketleri kullanabilirsiniz. Lakin \u015fimdilik bu ad\u0131m\u0131 herhangi bir konfig\u00fcrasyon yapmaks\u0131z\u0131n atlayabilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"980\" height=\"817\" class=\"aligncenter size-full wp-image-25773\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.png 980w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1-300x250.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1-768x640.png 768w\" sizes=\"auto, (max-width: 980px) 100vw, 980px\" \/><\/a>T\u00fcm bu yap\u0131land\u0131rmalardan sonra &#8216;Create user&#8217; butonuna t\u0131klay\u0131n\u0131z. \u0130\u015fte bu kadar&#8230; Art\u0131k Amazon S3 i\u00e7in yeni bir kullan\u0131c\u0131 olu\u015fturulmu\u015ftur.<\/p>\n<p>\u015eunu da unutmamak laz\u0131m ki, g\u00fcvenlik i\u00e7in olu\u015fturulan CSV dosyas\u0131n\u0131 a\u015fa\u011f\u0131daki gibi indirdi\u011finizden emin olun derim. Bu dosyada olu\u015fturdu\u011funuz kullan\u0131c\u0131ya dair Access Key Id ve Secret Access Key de\u011ferleriniz mevcuttur. Bu ayr\u0131nt\u0131lara daha sonra kodumuzu AWS S3 Service ile entegrasyon ger\u00e7ekle\u015ftirme s\u00fcrecinde ihtiyac\u0131m\u0131z olacakt\u0131r.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"965\" height=\"626\" class=\"aligncenter size-full wp-image-25774\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.png 965w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2-300x195.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2-768x498.png 768w\" sizes=\"auto, (max-width: 965px) 100vw, 965px\" \/><\/a><\/p>\n<h4>AWS Console Arac\u0131l\u0131\u011f\u0131yla AWS S3 Bucket Olu\u015fturma<\/h4>\n<p>\u015eimdi olu\u015fturdu\u011fumuz kullan\u0131c\u0131yla bir bucket olu\u015ftural\u0131m ve b\u00f6ylece bir nebze olsun AWS S3 Console&#8217;u ke\u015ffetmi\u015f olal\u0131m. Bunun i\u00e7in a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi arama \u00e7ubu\u011funa &#8216;S3&#8217; yaz\u0131p arat\u0131n\u0131z ve ilgili servisi a\u00e7\u0131n\u0131z. Devam\u0131nda ise sa\u011f taraftaki turuncu &#8216;Create bucket&#8217; butonuna t\u0131klay\u0131n\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.gif\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"800\" height=\"491\" class=\"aligncenter size-full wp-image-25776\" \/><\/a><br \/>\nBucket tan\u0131mlarken \u00f6zellikle ad\u0131n\u0131n global olarak unique olmas\u0131na \u00f6zen g\u00f6sterilmelidir. Ayr\u0131ca dosyalar\u0131n\u0131z\u0131n aktar\u0131m s\u00fcrecini optimize edebilmek i\u00e7in size en yak\u0131n b\u00f6lgeyi se\u00e7menizde fayda vard\u0131r.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.png\" alt=\"\" width=\"799\" height=\"644\" class=\"aligncenter size-full wp-image-25781\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.png 799w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3-300x242.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3-768x619.png 768w\" sizes=\"auto, (max-width: 799px) 100vw, 799px\" \/><\/a>\u0130lgili sayfada biraz a\u015fa\u011f\u0131 inerseniz <strong>Block Public Access settings for this bucket<\/strong> k\u0131sm\u0131n\u0131 g\u00f6rebilirsiniz. Varsay\u0131lan olarak AWS, bucket&#8217;lara kar\u015f\u0131 her t\u00fcrl\u00fc eri\u015fimi engellemektedir. Buradaki eri\u015fimle alakal\u0131 URL ile ilgili i\u015flemlerin nas\u0131l yap\u0131laca\u011f\u0131n\u0131 makalemizin devam\u0131nda g\u00f6r\u00fcyor olaca\u011f\u0131z. \u015eimdilik b\u00f6yle devam edebiliriz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"796\" height=\"734\" class=\"aligncenter size-full wp-image-25780\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.png 796w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4-300x277.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4-768x708.png 768w\" sizes=\"auto, (max-width: 796px) 100vw, 796px\" \/><\/a>Sayfada biraz daha inince etiketlerle ilgili konfig\u00fcrasyonlar\u0131 g\u00f6receksiniz. \u0130ste\u011fe ba\u011fl\u0131 oldu\u011fu i\u00e7in es ge\u00e7ebilirsiniz.<br \/>\nNetice itibariyle en son turuncu olan &#8216;Create bucket&#8217; butonuna t\u0131klayarak bucket olu\u015fturabilirsiniz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"803\" height=\"112\" class=\"aligncenter size-full wp-image-25782\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5.png 803w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5-300x42.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5-768x107.png 768w\" sizes=\"auto, (max-width: 803px) 100vw, 803px\" \/><\/a><br \/>\nA\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc incelerseniz e\u011fer bucket&#8217;\u0131 olu\u015fturduktan sonra test ama\u00e7l\u0131 bir dosya y\u00fckleme i\u015flemi ger\u00e7ekle\u015ftirmekteyiz. B\u00f6ylece sa\u011fl\u0131kl\u0131 bir \u015fekilde \u00e7al\u0131\u015fma sergiledi\u011fini g\u00f6zlemlemekteyiz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.gif\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"800\" height=\"363\" class=\"aligncenter size-full wp-image-25784\" \/><\/a><\/p>\n<h4>AWS CLI Y\u00fckleme ve Konfig\u00fcrasyonlar\u0131n\u0131 Ger\u00e7ekle\u015ftirme<\/h4>\n<p>\u00d6nceki sat\u0131rlarda AWS&#8217;den secret key&#8217;leri alm\u0131\u015ft\u0131k. \u015eimdi ise bu secret key&#8217;ler \u00fczerinden i\u015flem yapabilmek i\u00e7in temel konfig\u00fcrasyonel tan\u0131mlamalarda bulunuyor olaca\u011f\u0131z. .NET uygulamalar\u0131 i\u00e7in bu tarz de\u011ferlerin appsettings.json veya secret.json gibi dosyalarda depoland\u0131\u011f\u0131n\u0131 bildi\u011finizi biliyorum. Lakin bilmenizi istiyorum ki AWS CLI, bu tarz secret key&#8217;leri ve kimlik bilgilerini depolayabilmemiz i\u00e7in daha g\u00fcvenli olan <em>AWS Local Storage<\/em>&#8216;\u0131 sunmaktad\u0131r.<\/p>\n<p>Tabi AWS CLI&#8217;\u0131 kullanabilmek i\u00e7in ilk olarak bilgisayar\u0131n\u0131za kurman\u0131z gerekmektedir. Bunun i\u00e7in <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/getting-started-install.html\" rel=\"noopener\" target=\"_blank\">\u015furadan<\/a> i\u015fletim sisteminize \u00f6zel indirme i\u015flemini ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<p>AWS CLI&#8217;\u0131 bilgisayar\u0131n\u0131za kurduktan sonra \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test etmek i\u00e7in cmd \u00fczerinden <code>aws --version<\/code> talimat\u0131n\u0131 vermeniz yeterlidir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-6.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"473\" height=\"31\" class=\"aligncenter size-full wp-image-25788\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-6.png 473w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-6-300x20.png 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a>Yukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi cevap al\u0131yorsan\u0131z e\u011fer ba\u015far\u0131l\u0131s\u0131n\u0131z&#8230;<\/p>\n<p>\u015eimdi kimlik bilgilerini ve di\u011fer yap\u0131land\u0131rma \u00f6\u011felerini bar\u0131nd\u0131rmak ve okuyabilmek i\u00e7in yeni bir <em>AWS Local Configuration Profile<\/em> olu\u015ftural\u0131m. Bunun i\u00e7in de cmd \u00fczerinden a\u015fa\u011f\u0131daki talimat\u0131n verilmesi yeterlidir.<br \/>\n<code>aws configure --profile \"my-profile\"<\/code><br \/>\nBu talimat\u0131 verdikten sonra AWS CLI bizden Access Key ve Secret Key&#8217;leri a\u015fa\u011f\u0131daki gibi istenecektir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-7.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"569\" height=\"83\" class=\"aligncenter size-full wp-image-25790\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-7.png 569w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-7-300x44.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/a>Bu de\u011ferlerin aras\u0131nda &#8216;default region name&#8217;e kar\u015f\u0131l\u0131k S3 Bucket&#8217;i olu\u015ftururken se\u00e7ti\u011fimiz b\u00f6lge ad\u0131yla birebir ayn\u0131 de\u011feri verdi\u011finizden emin olunuz.<\/p>\n<p>Velhas\u0131l, netice itibariyle AWS CLI \u00fczerinden AWS Local Storage&#8217;a konfig\u00fcrasyonel de\u011ferlerimizi bu \u015fekilde yerle\u015ftirdikten sonra <code>C:\\Users\\name\\.aws<\/code> dizininde a\u015fa\u011f\u0131daki gibi dosyalar\u0131n olu\u015fturuldu\u011funu ve i\u00e7lerine verilerin depoland\u0131r\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6receksiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-8.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-8.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"413\" height=\"136\" class=\"aligncenter size-full wp-image-25791\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-8.png 413w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-8-300x99.png 300w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/a>Hatta dilerseniz bu dosyalar\u0131 not defterinde a\u00e7\u0131p a\u015fa\u011f\u0131daki gibi de inceleyebilirsiniz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-9.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-9.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"708\" height=\"185\" class=\"aligncenter size-full wp-image-25792\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-9.png 708w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-9-300x78.png 300w\" sizes=\"auto, (max-width: 708px) 100vw, 708px\" \/><\/a><br \/>\nVe b\u00f6ylece nihai olarak \u00e7al\u0131\u015fmam\u0131z\u0131n AWS S3 aya\u011f\u0131n\u0131 bitirdik diyebiliriz. \u015eimdi s\u0131ra Asp.NET Core taraf\u0131nda&#8230;<\/p>\n<h4>Asp.NET Core Web API Uygulamas\u0131n\u0131n Olu\u015fturulmas\u0131 ve Temel Konfig\u00fcrasyonlar\u0131n\u0131n Yap\u0131lmas\u0131<\/h4>\n<p>Uygulamay\u0131 \u00f6rneklendirebilmek i\u00e7in yeni bir Asp.NET Core Web API projesi a\u00e7\u0131n\u0131z ve hemen &#8216;appsettings.json&#8217; dosyas\u0131na yukar\u0131daki sat\u0131rlarda edindi\u011fimiz profil ve b\u00f6lge de\u011ferlerini konfig\u00fcrasyonel veriler olarak a\u015fa\u011f\u0131daki gibi ekleyiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;Logging&quot;: {\r\n    &quot;LogLevel&quot;: {\r\n      &quot;Default&quot;: &quot;Information&quot;,\r\n      &quot;Microsoft.AspNetCore&quot;: &quot;Warning&quot;\r\n    }\r\n  },\r\n  &quot;AllowedHosts&quot;: &quot;*&quot;,\r\n  &quot;AWS&quot;: {\r\n    &quot;Profile&quot;: &quot;my-profile&quot;,\r\n    &quot;Region&quot;: &quot;ap-south-1&quot;\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Bu i\u015flemden sonra AWS S3 servislerinin i\u015flevini daha efektif bir \u015fekilde ger\u00e7ekle\u015ftirebilmek i\u00e7in a\u015fa\u011f\u0131daki SDK k\u00fct\u00fcphanelerini uygulamaya y\u00fckleyiniz.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/AWSSDK.S3\" rel=\"noopener\" target=\"_blank\">AWSSDK.S3<\/a><\/li>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/AWSSDK.Extensions.NETCore.Setup\" rel=\"noopener\" target=\"_blank\">AWSSDK.Extensions.NETCore.Setup<\/a><\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"762\" height=\"139\" class=\"aligncenter size-full wp-image-25797\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme.png 762w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-300x55.png 300w\" sizes=\"auto, (max-width: 762px) 100vw, 762px\" \/><\/a>Ard\u0131ndan AWS servisini .NET uygulamas\u0131n\u0131n IoC Container&#8217;\u0131na a\u015fa\u011f\u0131daki gibi ekleyiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nbuilder.Services.AddDefaultAWSOptions(builder.Configuration.GetAWSOptions());\r\nbuilder.Services.AddAWSService&lt;IAmazonS3&gt;();\r\n\r\nvar app = builder.Build();\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<p>Bu \u00e7al\u0131\u015fmayla, &#8216;appsettings.json&#8217; dosyas\u0131ndaki konfig\u00fcrasyonel de\u011ferleri runtime&#8217;da kullanabilmek i\u00e7in cache&#8217;e y\u00fcklemi\u015f oluyoruz. Burada \u00f6zellikle <strong>5.<\/strong> sat\u0131ra dikkat ederseniz e\u011fer S3 servisini <code>IAmazonS3<\/code> interface&#8217;i ile pipeline&#8217;a ekleyerek, Bucket ve Objects i\u00e7in gerekli nesneleri bu aray\u00fcz e\u015fli\u011finde dependency injection ile talep edilebilir bir hale getiriyoruz.<\/p>\n<h4>.NET AWS SDK E\u015fli\u011finde AWS S3 Bucket \u0130\u015flemleri<\/h4>\n<p>\u0130\u00e7eri\u011fimizin \u00f6nceki sat\u0131rlar\u0131nda AWS Console \u00fczerinden bucket olu\u015fturmu\u015ftuk. \u015eimdi ise ayn\u0131 i\u015flemi API uygulamas\u0131 arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirece\u011fiz. Bunun i\u00e7in &#8216;BucketsController&#8217; isminde bir controller s\u0131n\u0131f\u0131 olu\u015fturunuz ve <code>IAmazonS3<\/code> aray\u00fcz\u00fcn\u00fc a\u015fa\u011f\u0131daki gibi IoC Container&#8217;dan inject ediniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;Route(&quot;api\/&#x5B;controller]&quot;)]\r\n    &#x5B;ApiController]\r\n    public class BucketsController : ControllerBase\r\n    {\r\n        readonly IAmazonS3 _amazonS3;\r\n\r\n        public BucketsController(IAmazonS3 amazonS3)\r\n        {\r\n            _amazonS3 = amazonS3;\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Ard\u0131ndan bucket olu\u015fturma sorumlulu\u011funa sahip a\u015fa\u011f\u0131daki action&#8217;\u0131 tan\u0131mlay\u0131n\u0131z.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class BucketsController : ControllerBase\r\n    {\r\n        .\r\n        .\r\n        .\r\n\r\n        &#x5B;HttpPost]\r\n        public async Task&lt;IActionResult&gt; CreateBucketAsync(string bucketName)\r\n        {\r\n            bool bucketExists = await _amazonS3.DoesS3BucketExistAsync(bucketName);\r\n            if (bucketExists)\r\n                return BadRequest($&quot;Bucket {bucketName} already exist.&quot;);\r\n            await _amazonS3.PutBucketAsync(bucketName);\r\n            return Ok($&quot;Bucket {bucketName} created.&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Bu action&#8217;a a\u015fa\u011f\u0131daki gibi g\u00f6nderilen post iste\u011fi neticesinde bucket&#8217;\u0131n olu\u015fturuldu\u011funu g\u00f6zlemliyor olaca\u011f\u0131z.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"579\" height=\"786\" class=\"aligncenter size-full wp-image-25798\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1.png 579w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-1-221x300.png 221w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"1517\" height=\"234\" class=\"aligncenter size-full wp-image-25799\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2.png 1517w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2-300x46.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2-1024x158.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-2-768x118.png 768w\" sizes=\"auto, (max-width: 1517px) 100vw, 1517px\" \/><\/a>\u015eimdide mevcut olan t\u00fcm bucket&#8217;lar\u0131 listelemesini ger\u00e7ekle\u015ftirelim;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        &#x5B;HttpGet]\r\n        public async Task&lt;IActionResult&gt; GetAllBucketsAsync()\r\n        {\r\n            ListBucketsResponse bucketDatas = await _amazonS3.ListBucketsAsync();\r\n            return Ok(bucketDatas);\r\n        }\r\n<\/pre>\n<\/div>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"1385\" height=\"445\" class=\"aligncenter size-full wp-image-25801\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3.png 1385w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3-300x96.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3-1024x329.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-3-768x247.png 768w\" sizes=\"auto, (max-width: 1385px) 100vw, 1385px\" \/><\/a>Ayriyeten bucket silmek i\u00e7in de a\u015fa\u011f\u0131daki gibi bir action&#8217;da olu\u015fturabilirsiniz:<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        &#x5B;HttpDelete(&quot;{bucketName}&quot;)]\r\n        public async Task&lt;IActionResult&gt; DeleteBucketAsync(string bucketName)\r\n        {\r\n            await _amazonS3.DeleteBucketAsync(bucketName);\r\n            return NoContent();\r\n        }\r\n<\/pre>\n<\/div>\n<h4>Asp.NET Core Uygulamas\u0131ndan AWS S3 Servislerinde Dosya \u0130\u015flemleri<\/h4>\n<p>Art\u0131k konumuzun ana temas\u0131na gelmi\u015f bulunuyoruz. AWS S3 servislerinde kullan\u0131c\u0131 olu\u015fturma, access key generate etme, cli y\u00fckleme ve bucket olu\u015fturma gibi gerekli olan temel \u00e7al\u0131\u015fmalar\u0131 ger\u00e7ekle\u015ftirdikten sonra art\u0131k AWS S3 servisleri \u00fczerinde dosya i\u015flemlerini ele almaya ba\u015flayabiliriz.<\/p>\n<p>Dosya i\u015flemlerinden kastetti\u011fimizin; y\u00fckleme, silme, listeleme ve indirme operasyonlar\u0131 oldu\u011funu bilmenizi isterim. Bunun i\u00e7in, bu sorumluluklar\u0131 \u00fcstlenecek &#8216;FilesController&#8217; ad\u0131nda bir controller s\u0131n\u0131f\u0131 olu\u015fturunuz ve i\u00e7eri\u011fine a\u015fa\u011f\u0131daki i\u015flemleri ger\u00e7ekle\u015ftiriniz.<\/p>\n<p>\u0130lk olarak <strong>upload<\/strong> operasyonunu in\u015fa edelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;Route(&quot;api\/&#x5B;controller]&quot;)]\r\n    &#x5B;ApiController]\r\n    public class FilesController : ControllerBase\r\n    {\r\n        readonly IAmazonS3 _amazonS3;\r\n\r\n        public FilesController(IAmazonS3 amazonS3)\r\n        {\r\n            _amazonS3 = amazonS3;\r\n        }\r\n\r\n        &#x5B;HttpPost]\r\n        public async Task&lt;IActionResult&gt; UploadFileAsync(IFormFile file, string bucketName, string? prefix)\r\n        {\r\n            bool bucketExists = await _amazonS3.DoesS3BucketExistAsync(bucketName);\r\n            if (!bucketExists)\r\n                return NotFound($&quot;Bucket {bucketName} does not exist.&quot;);\r\n            PutObjectRequest request = new()\r\n            {\r\n                BucketName = bucketName,\r\n                Key = String.IsNullOrEmpty(prefix) ? file.FileName : $&quot;{prefix?.TrimEnd('\/')}\/{file.FileName}&quot;,\r\n                InputStream = file.OpenReadStream()\r\n            };\r\n            request.Metadata.Add(&quot;Content-Type&quot;, file.ContentType);\r\n            await _amazonS3.PutObjectAsync(request);\r\n            return Ok($&quot;File {prefix}\/{file.FileName} uploaded to S3 successfully!&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki <code>UploadFileAsync<\/code> action&#8217;\u0131na g\u00f6z atarsan\u0131z e\u011fer dosya bilgileri(IFormFile) e\u015fli\u011finde, bucket name ve opsiyonel olarak klas\u00f6r ad\u0131(prefix) almaktad\u0131r. \u0130\u015flevsel olarak, AWS S3 hesab\u0131nda bucket var m\u0131 yok mu kontrol edilmekte ve e\u011fer varsa request haz\u0131rlan\u0131p dosya transferi ger\u00e7ekle\u015ftirilmektedir. <strong>24.<\/strong> sat\u0131rda ise bir Metadata \u00f6rneklendirmesi ger\u00e7ekle\u015ftirilmi\u015ftir. Metadata, y\u00fcklenecek dosyalara \u00f6zel farkl\u0131 \u00f6zellikleri ifade etmektedir.<\/p>\n<p>Velhas\u0131l&#8230; Uygulamay\u0131 derleyip, \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi test ederek dosya y\u00fcklemeyi deneyebilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"947\" height=\"895\" class=\"aligncenter size-full wp-image-25804\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4.png 947w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4-300x284.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-4-768x726.png 768w\" sizes=\"auto, (max-width: 947px) 100vw, 947px\" \/><\/a>Dosya y\u00fckleme i\u015fleminden sonra AWS S3&#8217;de ki bucket&#8217;\u0131n\u0131za gidip y\u00fcklemenin ba\u015far\u0131yla ger\u00e7ekle\u015fip ger\u00e7ekle\u015fmedi\u011fini de a\u015fa\u011f\u0131daki gibi g\u00f6zlemleyerek do\u011frulayabilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5.png\" alt=\"Asp.NET Core - AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme\" width=\"516\" height=\"443\" class=\"aligncenter size-full wp-image-25805\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5.png 516w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Asp.NET-Core-AWS-S3-Ile-Dosya-Islemleri-Gerceklestirme-5-300x258.png 300w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/a>\u015eimdi ise bucket&#8217;ta bulunan dosyalar\u0131 <strong>listelemeyi<\/strong> ele alal\u0131m.<\/p>\n<p>Tabi bunun i\u00e7in \u00f6ncelikle listelenecek nesnelerin bilgilerini kar\u015f\u0131layacak bir DTO olu\u015fturarak ba\u015flayal\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class S3ObjectDTO\r\n    {\r\n        public string Name { get; set; }\r\n        public string Url { get; set; }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki DTO nesnesine bakarsan\u0131z e\u011fer dosya ad\u0131 ve url bilgilerini edinmemiz \u015fimdilik yeterli g\u00f6z\u00fckmektedir. Bu ad\u0131mdan sonra &#8216;FileController&#8217; i\u00e7ersinde a\u015fa\u011f\u0131daki action&#8217;\u0131 geli\u015ftiriniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        &#x5B;HttpGet]\r\n        public async Task&lt;IActionResult&gt; GetAllFilesAsync(string bucketName, string? prefix)\r\n        {\r\n            bool bucketExists = await _amazonS3.DoesS3BucketExistAsync(bucketName);\r\n            if (!bucketExists)\r\n                return NotFound($&quot;Bucket {bucketName} does not exist.&quot;);\r\n            ListObjectsV2Request request = new()\r\n            {\r\n                BucketName = bucketName,\r\n                Prefix = prefix\r\n            };\r\n            ListObjectsV2Response response = await _amazonS3.ListObjectsV2Async(request);\r\n            List&lt;S3ObjectDTO&gt; objectDatas = response.S3Objects.Select(@object =&gt;\r\n             {\r\n                 GetPreSignedUrlRequest urlRequest = new()\r\n                 {\r\n                     BucketName = bucketName,\r\n                     Key = @object.Key,\r\n                     Expires = DateTime.UtcNow.AddMinutes(1)\r\n                 };\r\n                 return new S3ObjectDTO\r\n                 {\r\n                     Name = @object.Key,\r\n                     Url = _amazonS3.GetPreSignedURL(urlRequest)\r\n                 };\r\n             }).ToList();\r\n            return Ok(objectDatas);\r\n        }\r\n<\/pre>\n<\/div>\n<p>Bu geli\u015ftirmeden sonra uygulamay\u0131 derleyip, \u00e7al\u0131\u015ft\u0131r\u0131n\u0131z ve ilgili endpoint&#8217;i test ediniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513.png\" alt=\"Ekran g\u00f6r\u00fcnt\u00fcs\u00fc 2022-11-06 132513\" width=\"1372\" height=\"292\" class=\"aligncenter size-full wp-image-25806\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513.png 1372w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513-300x64.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513-1024x218.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513-768x163.png 768w\" sizes=\"auto, (max-width: 1372px) 100vw, 1372px\" \/><\/a>Burada \u00f6zellikle dikkat etmenizi istedi\u011fim bir husus vard\u0131r ki; o da, <strong>15<\/strong> ile <strong>25.<\/strong> sat\u0131r aral\u0131\u011f\u0131nda \u00fcretilen <strong style=\"color:red;\">Pre Signed URL<\/strong>&#8216;lerdir. AWS S3 servisleri, bucket&#8217;a y\u00fcklenen dosyalar\u0131n g\u00fcvenli\u011fi konusunda garanti sundu\u011funu ve eri\u015fim konusunda yetkilendirme gerektirdi\u011fini biliyoruz. Lakin, dosyalar\u0131 m\u00fc\u015fteriler taraf\u0131ndan \u00f6nizlenebilmesi i\u00e7in belirli bir s\u00fcreli\u011fine d\u0131\u015far\u0131 a\u00e7mam\u0131z\u0131 sa\u011flayan ve s\u00fcresi doldu\u011funda eri\u015fimi engelleyen Pre Signed URL ismini verdi\u011fimiz adresler geli\u015ftirmemize de imkan sa\u011flamaktad\u0131r. <strong>19.<\/strong> sat\u0131rda olu\u015fturulan bu ba\u011flant\u0131n\u0131n ya\u015fam s\u00fcresini istedi\u011fimiz gibi s\u0131n\u0131rland\u0131rabildi\u011fimize dikkatinizi \u00e7ekerim.<\/p>\n<p>Eri\u015fim s\u00fcresi dolan dosyalar\u0131n url&#8217;lerine istek g\u00f6nderdi\u011finizde sizleri a\u015fa\u011f\u0131daki gibi bir sayfa kar\u015f\u0131layacakt\u0131r.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513-1.png\" alt=\"Ekran g\u00f6r\u00fcnt\u00fcs\u00fc 2022-11-06 132513\" width=\"707\" height=\"157\" class=\"aligncenter size-full wp-image-25807\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513-1.png 707w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/11\/Ekran-goruntusu-2022-11-06-132513-1-300x67.png 300w\" sizes=\"auto, (max-width: 707px) 100vw, 707px\" \/><\/a>\u015eimdi dosya <strong>silme<\/strong> i\u015flemine odaklanal\u0131m.<\/p>\n<p>Bu i\u015flem a\u015fa\u011f\u0131daki gibi olduk\u00e7a basittir.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        &#x5B;HttpDelete(&quot;{bucketName}\/{fileName}&quot;)]\r\n        public async Task&lt;IActionResult&gt; DeleteFileAsync(string bucketName, string fileName)\r\n        {\r\n            bool bucketExists = await _amazonS3.DoesS3BucketExistAsync(bucketName);\r\n            if (!bucketExists)\r\n                return NotFound($&quot;Bucket {bucketName} does not exist.&quot;);\r\n            await _amazonS3.DeleteObjectAsync(bucketName, fileName);\r\n            return NoContent();\r\n        }\r\n<\/pre>\n<\/div>\n<p>Ve son olarak y\u00fcklenmi\u015f dosyalar\u0131 nas\u0131l <strong>indirebilece\u011fimizi(download)<\/strong> inceleyelim.<\/p>\n<p>Bu i\u015flem i\u00e7in de a\u015fa\u011f\u0131daki gibi stream operasyonu y\u00fcr\u00fctebilirsiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        &#x5B;HttpGet(&quot;download\/{bucketName}\/{fileName}&quot;)]\r\n        public async Task&lt;IActionResult&gt; GetFileByNameAsync(string bucketName, string fileName)\r\n        {\r\n            bool bucketExists = await _amazonS3.DoesS3BucketExistAsync(bucketName);\r\n            if (!bucketExists)\r\n                return NotFound($&quot;Bucket {bucketName} does not exist.&quot;);\r\n            GetObjectResponse response = await _amazonS3.GetObjectAsync(bucketName, fileName);\r\n            return File(response.ResponseStream, response.Headers.ContentType);\r\n        }\r\n<\/pre>\n<\/div>\n<p>Nihai olarak,<br \/>\nBu i\u00e7eri\u011fimizde, Asp.NET Core mimarisinde AWS S3 servisleri e\u015fli\u011finde dosya i\u015flemleri \u00fczerine bir tecr\u00fcbe kazanm\u0131\u015f bulunuyoruz. \u00dc\u015fenmeden e\u015flik etti\u011finiz i\u00e7in te\u015fekk\u00fcr ederim.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek \u00e7al\u0131\u015fmay\u0131 a\u015fa\u011f\u0131daki github adresinden edinebilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/AWSS3.Example\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/AWSS3.Example<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde, Amazon&#8217;un nesne depolama alan\u0131 olarak sundu\u011fu Amazon Simple Storage Service (Amazon S3)&#8216;i kullanarak dosya y\u00fckleme, silme ve indirme operasyonlar\u0131n\u0131 Asp.NET Core uygulamas\u0131 e\u015fli\u011finde ger\u00e7ekle\u015ftirecek ve b\u00f6ylece Amazon S3 hakk\u0131nda hem bilgi&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":25810,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739,4692],"tags":[4691,4693,4690,4695,4696,4694,4697],"class_list":["post-25760","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","category-amazon-s3","tag-amazon-s3","tag-amazon-s3-nedir","tag-amazon-simple-storage-service","tag-aws-cli","tag-aws-local-configuration","tag-aws-local-storage","tag-pre-signed-url"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25760","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=25760"}],"version-history":[{"count":23,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25760\/revisions"}],"predecessor-version":[{"id":25811,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25760\/revisions\/25811"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/25810"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=25760"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=25760"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=25760"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}