{"id":177,"date":"2025-05-04T11:08:20","date_gmt":"2025-05-04T11:08:20","guid":{"rendered":"https:\/\/www.webmobkey.com\/blog\/?p=177"},"modified":"2025-11-16T10:22:12","modified_gmt":"2025-11-16T10:22:12","slug":"asp-net-core-ile-dosya-yukleme-gorsel-yeniden-boyutlandirma-ve-dosya-dogrulama","status":"publish","type":"post","link":"https:\/\/www.webmobdesign.com\/blog\/tr\/asp-net-core-ile-dosya-yukleme-gorsel-yeniden-boyutlandirma-ve-dosya-dogrulama\/","title":{"rendered":"ASP.NET Core ile Dosya Y\u00fckleme, G\u00f6rsel Yeniden Boyutland\u0131rma ve Dosya Do\u011frulama"},"content":{"rendered":"\n<p id=\"dbb1\">Modern web uygulamalar\u0131nda dosya y\u00fckleme, kullan\u0131c\u0131lar\u0131n g\u00f6rseller, belgeler veya tablolar gibi farkl\u0131 dosya t\u00fcrlerini y\u00fcklemelerine olanak tan\u0131r. Bu blog yaz\u0131s\u0131nda, ASP.NET Core MVC uygulamas\u0131nda dosya y\u00fckleme i\u015flemi ger\u00e7ekle\u015ftirece\u011fiz. Ayr\u0131ca, g\u00f6rselleri yeniden boyutland\u0131rma, dosya t\u00fcr\u00fc do\u011frulama ve dosya adlar\u0131n\u0131n g\u00fcvenli bir \u015fekilde i\u015flenmesi gibi konular\u0131 ele alaca\u011f\u0131z.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"d095\">Gereksinimler<\/h5>\n\n\n\n<p id=\"4033\">Kodumuza ba\u015flamadan \u00f6nce, g\u00f6rsel i\u015fleme g\u00f6revlerini kolayca ger\u00e7ekle\u015ftirebilmek i\u00e7in&nbsp;<strong>SixLabors.ImageSharp<\/strong>&nbsp;paketini y\u00fcklememiz gerekecek. Bu k\u00fct\u00fcphane, ASP.NET Core ile entegre bir \u015fekilde g\u00f6rselleri i\u015flemek i\u00e7in m\u00fckemmel bir se\u00e7enektir.<\/p>\n\n\n\n<p id=\"6a6e\">A\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak&nbsp;<strong>ImageSharp<\/strong>&nbsp;paketini y\u00fckleyebilirsiniz:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndotnet add package SixLabors.ImageSharp --version 3.1.5\n<\/pre><\/div>\n\n\n<p id=\"0d52\">Bu komut,&nbsp;<strong>SixLabors.ImageSharp<\/strong>&nbsp;k\u00fct\u00fcphanesinin 3.1.5 s\u00fcr\u00fcm\u00fcn\u00fc y\u00fckleyecektir. Bu s\u00fcr\u00fcm, g\u00f6rselleri yeniden boyutland\u0131rma ve i\u015flemeye y\u00f6nelik ihtiya\u00e7lar\u0131m\u0131z\u0131 kar\u015f\u0131layacakt\u0131r.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5d87\">Kod \u0130ncelemesi<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"bc53\">1. Dosya Y\u00fckleme i\u00e7in Controller Olu\u015fturma<\/h5>\n\n\n\n<p id=\"1c3d\">A\u015fa\u011f\u0131daki kodda,&nbsp;<code>HomeController<\/code>&nbsp;isminde bir controller olu\u015fturduk. Bu controller, dosya y\u00fcklemeyi i\u015fler ve y\u00fcklenen dosyalar\u0131n g\u00fcvenli\u011fini sa\u011flamak i\u00e7in \u00e7e\u015fitli do\u011frulamalar yapar. Controller, iki ana metot i\u00e7eriyor:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>Index()<\/strong><\/code>: Kullan\u0131c\u0131lara dosya y\u00fckleyebilecekleri bir HTML formu sunar.<\/li>\n\n\n\n<li><code><strong>UploadFile()<\/strong><\/code>: Dosya y\u00fckleme i\u015flemini y\u00f6netir, dosya t\u00fcr\u00fcn\u00fc ve boyutunu do\u011frular ve dosyay\u0131 sunucuya kaydeder.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace FileUpload.Controllers\n{\n    public class HomeController : Controller\n    {\n        \/\/ GET: \/Home\/Index\n        &#x5B;HttpGet]\n        &#x5B;Route(&quot;\/&quot;)]\n        public IActionResult Index()\n        {\n            \/\/ HTML formunu d\u00f6nd\u00fcr\n            return Content(@&quot;\n                &lt;html&gt;\n                &lt;head&gt;&lt;meta charset=&quot;&quot;utf-8&quot;&quot;&gt;&lt;\/head&gt;\n                &lt;body&gt;\n                    &lt;h2&gt;Dosya Y\u00fckleyin&lt;\/h2&gt;\n                    &lt;form action=&quot;&quot;\/Home\/UploadFile&quot;&quot; method=&quot;&quot;post&quot;&quot; enctype=&quot;&quot;multipart\/form-data&quot;&quot;&gt;\n                        &lt;label for=&quot;&quot;file&quot;&quot;&gt;Dosya Se\u00e7in:&lt;\/label&gt;\n                        &lt;input type=&quot;&quot;file&quot;&quot; name=&quot;&quot;file&quot;&quot; required \/&gt;\n                        &lt;button type=&quot;&quot;submit&quot;&quot;&gt;Y\u00fckle&lt;\/button&gt;\n                    &lt;\/form&gt;\n                &lt;\/body&gt;\n                &lt;\/html&gt;&quot;, &quot;text\/html&quot;);\n        }\n\n        &#x5B;HttpPost]\n        public async Task&lt;IActionResult&gt; UploadFile(IFormFile file)\n        {\n            var isUploaded = await FileUploadHelper.UploadFileAsync(file, file.FileName, Path.Combine(&quot;wwwroot\/uploads&quot;));\n\n            if (Convert.ToBoolean(isUploaded&#x5B;&quot;status&quot;]))\n            {\n                return Ok(isUploaded);\n            }\n            else\n            {\n                return BadRequest(&quot;Dosya y\u00fckleme ba\u015far\u0131s\u0131z oldu. L\u00fctfen dosya t\u00fcr\u00fcn\u00fc ve boyutunu kontrol edip tekrar deneyin.&quot;);\n            }\n        }\n    }\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"06cc\">2. Dosya Y\u00fckleme ve \u0130\u015fleme Yard\u0131mc\u0131 S\u0131n\u0131f\u0131<\/h2>\n\n\n\n<p id=\"9712\">Dosya y\u00fckleme ve i\u015fleme i\u015flemlerini y\u00f6neten bir yard\u0131mc\u0131 s\u0131n\u0131f (<code>FileUploadHelper<\/code>) olu\u015fturduk. Bu s\u0131n\u0131f, dosya adlar\u0131n\u0131 g\u00fcvenli hale getirir, dosya t\u00fcrlerini do\u011frular ve g\u00f6rsellerin boyutunu yeniden d\u00fczenler.<\/p>\n\n\n\n<p id=\"ea0d\"><strong>\u0130\u015fte&nbsp;<code>FileUploadHelper<\/code>&nbsp;s\u0131n\u0131f\u0131n\u0131n kodu:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\nusing SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.Processing;\nusing System.Text.RegularExpressions;\n\npublic class FileUploadHelper\n{\n    public static async Task&lt;Dictionary&lt;string, object&gt;&gt; UploadFileAsync(IFormFile file, string fileName, string uploadPath, bool deleteIfExists = false)\n    {\n        var result = new Dictionary&lt;string, object&gt;\n        {\n            { &quot;status&quot;, false },\n            { &quot;fileName&quot;, &quot;&quot; }\n        };\n\n        if (file == null || file.Length == 0)\n        {\n            return result; \/\/ Dosya bo\u015fsa veya y\u00fcklenmediyse false d\u00f6ner\n        }\n\n        \/\/ T\u00fcrk\u00e7e karakterleri g\u00fcvenli hale getirmek i\u00e7in dosya ad\u0131n\u0131 temizleyin\n        fileName = MakeFileNameSafe(fileName);\n\n        \/\/ Ge\u00e7erli dosya t\u00fcrlerini kontrol et (Updated file types)\n        var allowedTypes = new&#x5B;] {\n            &quot;image\/jpeg&quot;, &quot;image\/jpg&quot;, &quot;image\/png&quot;, &quot;application\/pdf&quot;, &quot;application\/msword&quot;, &quot;application\/vnd.openxmlformats-officedocument.wordprocessingml.document&quot;, \/\/ Word formats\n            &quot;application\/vnd.ms-excel&quot;, &quot;application\/vnd.openxmlformats.officedocument.spreadsheetml.sheet&quot;, \/\/ Excel formats\n            &quot;image\/svg+xml&quot;, &quot;application\/vnd.oasis.opendocument.text&quot;, &quot;application\/vnd.oasis.opendocument.spreadsheet&quot;, \/\/ ODT, ODS, SVG\n            &quot;image\/webp&quot;\n        };\n\n        if (!allowedTypes.Contains(file.ContentType))\n        {\n            return result; \/\/ Desteklenmeyen dosya t\u00fcr\u00fc\n        }\n\n        \/\/ Dosya boyutunu kontrol et (5 MB s\u0131n\u0131r\u0131)\n        const long maxFileSize = 5 * 1024 * 1024;\n        if (file.Length &gt; maxFileSize)\n        {\n            return result; \/\/ Dosya \u00e7ok b\u00fcy\u00fckse\n        }\n\n        try\n        {\n            var filePath = Path.Combine(uploadPath, fileName);\n\n            \/\/ Check if the file already exists\n            if (File.Exists(filePath))\n            {\n                if (deleteIfExists)\n                {\n                    \/\/ If deleteIfExists is true, delete the existing file\n                    File.Delete(filePath);\n                }\n                else\n                {\n                    \/\/ If file exists and deleteIfExists is false, generate a unique name\n                    fileName = GenerateUniqueFileName(uploadPath, fileName);\n                    filePath = Path.Combine(uploadPath, fileName);\n                }\n            }\n\n            \/\/ If the file is an image, handle it separately\n            if (file.ContentType.StartsWith(&quot;image&quot;))\n            {\n                using var image = await Image.LoadAsync(file.OpenReadStream());\n\n                \/\/ Resize the image to a maximum of 800x800 pixels\n                int maxWidth = 800;\n                int maxHeight = 800;\n                image.Mutate(x =&gt; x.Resize(new ResizeOptions\n                {\n                    Mode = ResizeMode.Max,\n                    Size = new Size(maxWidth, maxHeight)\n                }));\n\n                \/\/ Save the resized image to the specified file path\n                await image.SaveAsync(filePath);\n            }\n            else\n            {\n                \/\/ If the file is not an image, save it directly to the file system\n                using var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.Asynchronous);\n                await file.CopyToAsync(stream);\n            }\n\n            \/\/ If upload is successful, update the result dictionary\n            result&#x5B;&quot;status&quot;] = true;\n            result&#x5B;&quot;fileName&quot;] = fileName; \/\/ Set the uploaded file name\n        }\n        catch (Exception)\n        {\n            return result; \/\/ Hata varsa status false d\u00f6ner\n        }\n\n        return result;\n    }\n\n    private static string MakeFileNameSafe(string fileName)\n    {\n        \/\/ G\u00fcvenlik amac\u0131yla ge\u00e7ersiz karakterleri temizlerken T\u00fcrk\u00e7e karakterleri koruyun\n        fileName = Regex.Replace(fileName, @&quot;&#x5B;&lt;&gt;:&quot;&quot;\/\\\\|?*]&quot;, &quot;&quot;);  \/\/ Yasakl\u0131 karakterleri kald\u0131r\n\n        \/\/ Bo\u015fluklar\u0131 ve di\u011fer \u00f6zel karakterleri &quot;-&quot; ile de\u011fi\u015ftirin, T\u00fcrk\u00e7e karakterleri oldu\u011fu gibi b\u0131rak\u0131n\n        return Regex.Replace(fileName, @&quot;\\s+&quot;, &quot;-&quot;);\n    }\n\n    private static string GenerateUniqueFileName(string uploadPath, string fileName)\n    {\n        var fileExtension = Path.GetExtension(fileName);\n        var baseFileName = Path.GetFileNameWithoutExtension(fileName);\n\n        \/\/ Create a unique name by appending a timestamp to the original file name\n        var uniqueFileName = $&quot;{baseFileName}_{DateTime.UtcNow.Ticks}{fileExtension}&quot;;\n        var uniqueFilePath = Path.Combine(uploadPath, uniqueFileName);\n\n        \/\/ Ensure that the generated unique name doesn't collide with an existing file\n        while (File.Exists(uniqueFilePath))\n        {\n            uniqueFileName = $&quot;{baseFileName}_{DateTime.UtcNow.Ticks}{fileExtension}&quot;;\n            uniqueFilePath = Path.Combine(uploadPath, uniqueFileName);\n        }\n\n        return uniqueFileName;\n    }\n}\n<\/pre><\/div>\n\n\n<p id=\"0477\">TAM KOD<\/p>\n\n\n\n<p id=\"1f49\"><strong>HomeController.cs<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\nusing Microsoft.AspNetCore.Mvc;\nnamespace FileUpload.Controllers\n{\n    public class HomeController : Controller\n    {\n        \/\/ GET: \/Home\/Index\n        &#x5B;HttpGet]\n        &#x5B;Route(&quot;\/&quot;)]\n        public IActionResult Index()\n        {\n            \/\/ HTML formunu d\u00f6nd\u00fcr\n            return Content(@&quot;\n                &lt;html&gt;\n                &lt;head&gt;&lt;meta charset=&quot;&quot;utf-8&quot;&quot;&gt;&lt;\/head&gt;\n                &lt;body&gt;\n                    &lt;h2&gt;Upload a File&lt;\/h2&gt;\n                    &lt;form action=&quot;&quot;\/Home\/UploadFile&quot;&quot; method=&quot;&quot;post&quot;&quot; enctype=&quot;&quot;multipart\/form-data&quot;&quot;&gt;\n                        &lt;label for=&quot;&quot;file&quot;&quot;&gt;Choose file:&lt;\/label&gt;\n                        &lt;input type=&quot;&quot;file&quot;&quot; name=&quot;&quot;file&quot;&quot; required \/&gt;\n                        &lt;button type=&quot;&quot;submit&quot;&quot;&gt;Upload&lt;\/button&gt;\n                    &lt;\/form&gt;\n                &lt;\/body&gt;\n                &lt;\/html&gt;&quot;, &quot;text\/html&quot;);\n        }\n\n        &#x5B;HttpPost]\n        public async Task&lt;IActionResult&gt; UploadFile(IFormFile file)\n        {\n            var isUploaded = await FileUploadHelper.UploadFileAsync(file, file.FileName, Path.Combine(&quot;wwwroot\/uploads&quot;));\n\n            if (Convert.ToBoolean(isUploaded&#x5B;&quot;status&quot;]))\n            {\n                return Ok(isUploaded);\n            }\n            else\n            {\n                return BadRequest(&quot;File upload failed. Please check file type, size, and try again.&quot;);\n            }\n        }\n    }\n}\n<\/pre><\/div>\n\n\n<p><strong>Models\/FileUploads.cs<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\nusing SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.Processing;\nusing System.Text.RegularExpressions;\n\npublic class FileUploadHelper\n{\n    public static async Task&lt;Dictionary&lt;string, object&gt;&gt; UploadFileAsync(IFormFile file, string fileName, string uploadPath, bool deleteIfExists = false)\n    {\n        var result = new Dictionary&lt;string, object&gt;\n        {\n            { &quot;status&quot;, false },\n            { &quot;fileName&quot;, &quot;&quot; }\n        };\n\n        if (file == null || file.Length == 0)\n        {\n            return result; \/\/ Dosya bo\u015fsa veya y\u00fcklenmediyse false d\u00f6ner\n        }\n\n        \/\/ T\u00fcrk\u00e7e karakterleri g\u00fcvenli hale getirmek i\u00e7in dosya ad\u0131n\u0131 temizleyin\n        fileName = MakeFileNameSafe(fileName);\n\n        \/\/ Ge\u00e7erli dosya t\u00fcrlerini kontrol et (Updated file types)\n        var allowedTypes = new&#x5B;] {\n            &quot;image\/jpeg&quot;, &quot;image\/jpg&quot;, &quot;image\/png&quot;, &quot;application\/pdf&quot;, &quot;application\/msword&quot;, &quot;application\/vnd.openxmlformats-officedocument.wordprocessingml.document&quot;, \/\/ Word formats\n            &quot;application\/vnd.ms-excel&quot;, &quot;application\/vnd.openxmlformats.officedocument.spreadsheetml.sheet&quot;, \/\/ Excel formats\n            &quot;image\/svg+xml&quot;, &quot;application\/vnd.oasis.opendocument.text&quot;, &quot;application\/vnd.oasis.opendocument.spreadsheet&quot;, \/\/ ODT, ODS, SVG\n            &quot;image\/webp&quot;\n        };\n\n        if (!allowedTypes.Contains(file.ContentType))\n        {\n            return result; \/\/ Desteklenmeyen dosya t\u00fcr\u00fc\n        }\n\n        \/\/ Dosya boyutunu kontrol et (5 MB s\u0131n\u0131r\u0131)\n        const long maxFileSize = 5 * 1024 * 1024;\n        if (file.Length &gt; maxFileSize)\n        {\n            return result; \/\/ Dosya \u00e7ok b\u00fcy\u00fckse\n        }\n\n        try\n        {\n            var filePath = Path.Combine(uploadPath, fileName);\n\n            \/\/ Check if the file already exists\n            if (File.Exists(filePath))\n            {\n                if (deleteIfExists)\n                {\n                    \/\/ If deleteIfExists is true, delete the existing file\n                    File.Delete(filePath);\n                }\n                else\n                {\n                    \/\/ If file exists and deleteIfExists is false, generate a unique name\n                    fileName = GenerateUniqueFileName(uploadPath, fileName);\n                    filePath = Path.Combine(uploadPath, fileName);\n                }\n            }\n\n            \/\/ If the file is an image, handle it separately\n            if (file.ContentType.StartsWith(&quot;image&quot;))\n            {\n                using var image = await Image.LoadAsync(file.OpenReadStream());\n\n                \/\/ Resize the image to a maximum of 800x800 pixels\n                int maxWidth = 800;\n                int maxHeight = 800;\n                image.Mutate(x =&gt; x.Resize(new ResizeOptions\n                {\n                    Mode = ResizeMode.Max,\n                    Size = new Size(maxWidth, maxHeight)\n                }));\n\n                \/\/ Save the resized image to the specified file path\n                await image.SaveAsync(filePath);\n            }\n            else\n            {\n                \/\/ If the file is not an image, save it directly to the file system\n                using var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.Asynchronous);\n                await file.CopyToAsync(stream);\n            }\n\n            \/\/ If upload is successful, update the result dictionary\n            result&#x5B;&quot;status&quot;] = true;\n            result&#x5B;&quot;fileName&quot;] = fileName; \/\/ Set the uploaded file name\n        }\n        catch (Exception)\n        {\n            return result; \/\/ Hata varsa status false d\u00f6ner\n        }\n\n        return result;\n    }\n\n    private static string MakeFileNameSafe(string fileName)\n    {\n        \/\/ G\u00fcvenlik amac\u0131yla ge\u00e7ersiz karakterleri temizlerken T\u00fcrk\u00e7e karakterleri koruyun\n        fileName = Regex.Replace(fileName, @&quot;&#x5B;&lt;&gt;:&quot;&quot;\/\\\\|?*]&quot;, &quot;&quot;);  \/\/ Yasakl\u0131 karakterleri kald\u0131r\n\n        \/\/ Bo\u015fluklar\u0131 ve di\u011fer \u00f6zel karakterleri &quot;-&quot; ile de\u011fi\u015ftirin, T\u00fcrk\u00e7e karakterleri oldu\u011fu gibi b\u0131rak\u0131n\n        return Regex.Replace(fileName, @&quot;\\s+&quot;, &quot;-&quot;);\n    }\n\n    private static string GenerateUniqueFileName(string uploadPath, string fileName)\n    {\n        var fileExtension = Path.GetExtension(fileName);\n        var baseFileName = Path.GetFileNameWithoutExtension(fileName);\n\n        \/\/ Create a unique name by appending a timestamp to the original file name\n        var uniqueFileName = $&quot;{baseFileName}_{DateTime.UtcNow.Ticks}{fileExtension}&quot;;\n        var uniqueFilePath = Path.Combine(uploadPath, uniqueFileName);\n\n        \/\/ Ensure that the generated unique name doesn't collide with an existing file\n        while (File.Exists(uniqueFilePath))\n        {\n            uniqueFileName = $&quot;{baseFileName}_{DateTime.UtcNow.Ticks}{fileExtension}&quot;;\n            uniqueFilePath = Path.Combine(uploadPath, uniqueFileName);\n        }\n\n        return uniqueFileName;\n    }\n}\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"aa44\">Sonu\u00e7<\/h4>\n\n\n\n<p id=\"ae3c\">Bu basit uygulama sayesinde, ASP.NET Core MVC ile dosya y\u00fckleme i\u015flemi ger\u00e7ekle\u015ftirebilir, y\u00fcklenen dosyalar\u0131 g\u00fcvenli bir \u015fekilde sunucuda depolayabilir ve g\u00f6rsellerin boyutunu istedi\u011finiz \u015fekilde yeniden boyutland\u0131rabilirsiniz. Ayr\u0131ca, dosya t\u00fcr\u00fc ve boyutu do\u011frulamas\u0131 ile sadece ge\u00e7erli dosyalar\u0131n y\u00fcklenmesini sa\u011flars\u0131n\u0131z.<\/p>\n\n\n\n<p id=\"3c54\">Bu blogda kullan\u0131lan&nbsp;<strong>SixLabors.ImageSharp<\/strong>&nbsp;k\u00fct\u00fcphanesini y\u00fcklemek i\u00e7in:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndotnet add package SixLabors.ImageSharp --version 3.1.5\n<\/pre><\/div>\n\n\n<p id=\"bbe3\">Komutunu kullanarak g\u00f6rsel i\u015fleme i\u015flemlerini kolayca ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n\n\n\n<p id=\"521e\">Umar\u0131m bu yaz\u0131, ASP.NET Core\u2019da dosya y\u00fckleme ve g\u00fcvenli dosya i\u015fleme konular\u0131nda size yard\u0131mc\u0131 olmu\u015ftur!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Modern web uygulamalar\u0131nda dosya y\u00fckleme, kullan\u0131c\u0131lar\u0131n g\u00f6rseller, belgeler veya tablolar gibi farkl\u0131 dosya t\u00fcrlerini y\u00fcklemelerine olanak &hellip; <a title=\"ASP.NET Core ile Dosya Y\u00fckleme, G\u00f6rsel Yeniden Boyutland\u0131rma ve Dosya Do\u011frulama\" class=\"hm-read-more\" href=\"https:\/\/www.webmobdesign.com\/blog\/tr\/asp-net-core-ile-dosya-yukleme-gorsel-yeniden-boyutlandirma-ve-dosya-dogrulama\/\"><span class=\"screen-reader-text\">ASP.NET Core ile Dosya Y\u00fckleme, G\u00f6rsel Yeniden Boyutland\u0131rma ve Dosya Do\u011frulama<\/span>Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51],"tags":[],"class_list":["post-177","post","type-post","status-publish","format-standard","hentry","category-web-tr"],"_links":{"self":[{"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/posts\/177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/comments?post=177"}],"version-history":[{"count":1,"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":324,"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/posts\/177\/revisions\/324"}],"wp:attachment":[{"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/media?parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/categories?post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webmobdesign.com\/blog\/wp-json\/wp\/v2\/tags?post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}