العمل مع S3 والتخزين السحابي في C# (.NET): مكتبة AWS SDK

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع S3 والتخزين السحابي في C# (.NET)

\n\n

تتطلب التقنيات السحابية الحديثة تخزينًا موثوقًا وإدارة فعالة للبيانات. أحد المعايير الفعلية للتخزين الكائني هو بروتوكول Amazon S3 (خدمة التخزين البسيطة). في بيئة C# (.NET)، للعمل مع S3 وأي تخزين متوافق مع S3 (Yandex Object Storage، MinIO، DigitalOcean Spaces، VK Cloud)، يتم استخدام المكتبة الرسمية AWS SDK for .NET (الحزمة AWSSDK.S3).

\n\n

في هذه المقالة، سنشرح بالتفصيل كيفية توصيل المكتبة، إعداد العميل، تنفيذ العمليات الأساسية (رفع، تنزيل، حذف، سرد) وتكييف الكود للعمل مع محاكيات S3 المحلية مثل MinIO.

\n\n

تثبيت المكتبة

\n\n

للبدء، أضف حزمة NuGet إلى مشروعك:

\n\n
dotnet add package AWSSDK.S3
\n\n

أو عبر مدير الحزم في Visual Studio:

\n\n
Install-Package AWSSDK.S3
\n\n

إنشاء وتكوين عميل S3

\n\n

توفر المكتبة الفئة AmazonS3Client، والتي يمكن تكوينها للعمل مع أي تخزين متوافق مع S3. سننظر في خيارين: الاتصال بـ Amazon S3 و MinIO المحلي.

\n\n

الاتصال بـ Amazon S3

\n\n
using Amazon;\nusing Amazon.S3;\nusing Amazon.Runtime;\n\nvar credentials = new BasicAWSCredentials("مفتاح_الوصول_الخاص_بك", "مفتاح_السري_الخاص_بك");\nvar config = new AmazonS3Config\n{\n    RegionEndpoint = RegionEndpoint.EUWest1 // أو منطقة أخرى\n};\n\nusing var client = new AmazonS3Client(credentials, config);
\n\n

الاتصال بـ MinIO (خادم S3 محلي)

\n\n
using Amazon.S3;\nusing Amazon.Runtime;\n\nvar credentials = new BasicAWSCredentials("minioadmin", "minioadmin");\nvar config = new AmazonS3Config\n{\n    ServiceURL = "http://localhost:9000", // عنوان MinIO\n    ForcePathStyle = true,                // إلزامي لـ MinIO\n    UseHttp = true\n};\n\nusing var client = new AmazonS3Client(credentials, config);
\n\n

العمليات الأساسية مع S3

\n\n

يتم تنفيذ جميع العمليات بشكل غير متزامن عبر طرق العميل. سننظر في السيناريوهات الرئيسية.

\n\n

1. رفع ملف (Upload)

\n\n
using Amazon.S3;\nusing Amazon.S3.Model;\n\npublic async Task UploadFileAsync(IAmazonS3 client, string bucketName, string filePath, string key)\n{\n    var request = new PutObjectRequest\n    {\n        BucketName = bucketName,\n        Key = key,\n        FilePath = filePath\n    };\n\n    var response = await client.PutObjectAsync(request);\n    Console.WriteLine($"تم رفع الملف. ETag: {response.ETag}");\n}
\n\n

2. تنزيل ملف (Download)

\n\n
public async Task DownloadFileAsync(IAmazonS3 client, string bucketName, string key, string downloadPath)\n{\n    var request = new GetObjectRequest\n    {\n        BucketName = bucketName,\n        Key = key\n    };\n\n    using var response = await client.GetObjectAsync(request);\n    await response.WriteResponseStreamToFileAsync(downloadPath, false, CancellationToken.None);\n    Console.WriteLine($"تم حفظ الملف في {downloadPath}");\n}
\n\n

3. حذف ملف (Delete)

\n\n
public async Task DeleteFileAsync(IAmazonS3 client, string bucketName, string key)\n{\n    var request = new DeleteObjectRequest\n    {\n        BucketName = bucketName,\n        Key = key\n    };\n\n    var response = await client.DeleteObjectAsync(request);\n    Console.WriteLine($"تم حذف الملف. حالة HTTP: {response.HttpStatusCode}");\n}
\n\n

4. الحصول على قائمة الملفات (List Objects)

\n\n
public async Task ListFilesAsync(IAmazonS3 client, string bucketName)\n{\n    var request = new ListObjectsV2Request\n    {\n        BucketName = bucketName,\n        MaxKeys = 100\n    };\n\n    ListObjectsV2Response response;\n    do\n    {\n        response = await client.ListObjectsV2Async(request);\n        \n        foreach (var obj in respo                    

توصيات