العمل مع S3 والتخزين السحابي في Java: AWS SDK و MinIO

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

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

ابدأ الدورة

العمل مع S3 والتخزين السحابي في Java باستخدام AWS SDK و MinIO

\n\n

أصبحت التخزينات الكائنية السحابية المتوافقة مع بروتوكول Amazon S3 (Simple Storage Service) المعيار الفعلي لتخزين البيانات غير المهيكلة: الصور، الفيديوهات، السجلات، النسخ الاحتياطية، وقطع البناء. في Java، الأداة الرئيسية للتفاعل مع هذه التخزينات هي AWS SDK for Java (وحدة S3). ومع ذلك، للتطوير المحلي، الاختبار، أو العمل مع الحلول المستضافة ذاتيًا، غالبًا ما يُستخدم MinIO - وهو تخزين عالي الأداء متوافق مع S3 مع عميل Java خاص به. في هذه المقالة، سننظر في كلا النهجين.

\n\n

1. التحضير وإضافة التبعيات

\n\n

للبدء، أضف التبعيات إلى ملف pom.xml الخاص بك (Maven):

\n\n
<dependency>\n    <groupId>software.amazon.awssdk</groupId>\n    <artifactId>s3</artifactId>\n    <version>2.30.0</version>\n</dependency>\n\n<!-- لـ MinIO (بديل AWS SDK) -->\n<dependency>\n    <groupId>io.minio</groupId>\n    <artifactId>minio</artifactId>\n    <version>8.5.17</version>\n</dependency>
\n\n

2. إنشاء عميل S3

\n\n

سننظر في طريقتين لإنشاء العميل: لـ Amazon S3 (AWS) ولـ MinIO (تخزين محلي/مخصص).

\n\n

2.1. عميل لـ Amazon S3 (AWS SDK)

\n\n

استخدم الباني الثابت (static builder)، مع تحديد المنطقة وطريقة المصادقة (على سبيل المثال، عبر متغيرات البيئة أو ملف تعريف IAM).

\n\n
import software.amazon.awssdk.regions.Region;\nimport software.amazon.awssdk.services.s3.S3Client;\n\npublic class AwsS3Example {\n    public static S3Client createAwsS3Client() {\n        return S3Client.builder()\n                .region(Region.EU_CENTRAL_1) // فرانكفورت\n                .build(); // يستخدم سلسلة المزودين الافتراضية\n    }\n}
\n\n

2.2. عميل لـ MinIO

\n\n

يتطلب MinIO تحديد endpoint و access key و secret key بشكل صريح.

\n\n
import io.minio.MinioClient;\n\npublic class MinioExample {\n    public static MinioClient createMinioClient() {\n        return MinioClient.builder()\n                .endpoint("http://localhost:9000")\n                .credentials("minioadmin", "minioadmin")\n                .build();\n    }\n}
\n\n

3. العمليات الأساسية مع الحاويات والكائنات

\n\n

بغض النظر عن العميل المختار، فإن منطق العمل مع S3 عالمي. سننظر في السيناريوهات الرئيسية.

\n\n

3.1. التحقق من وجود الحاوية وإنشائها

\n\n
// AWS SDK\npublic boolean bucketExists(S3Client s3, String bucketName) {\n    return s3.headBucket(HeadBucketRequest.builder()\n            .bucket(bucketName)\n            .build())\n            .sdkHttpResponse().isSuccessful();\n}\n\n// MinIO SDK\npublic boolean bucketExists(MinioClient minio, String bucketName) {\n    return minio.bucketExists(BucketExistsArgs.builder()\n            .bucket(bucketName)\n            .build());\n}\n\n// إنشاء حاوية (AWS)\ns3.createBucket(CreateBucketRequest.builder()\n        .bucket("my-unique-bucket-123")\n        .createBucketConfiguration(\n            CreateBucketConfiguration.builder()\n                .locationConstraint("eu-central-1")\n                .build())\n        .build());\n\n// إنشاء حاوية (MinIO)\nminio.makeBucket(MakeBucketArgs.builder()\n        .bucket("my-local-bucket")\n        .build());
\n\n

3.2. تحميل ملف (Upload)

\n\n

تحميل ملف من مسار محلي أو من تدفق بيانات.

\n\n
// AWS SDK - من ملف\ns3.putObject(PutObjectRequest.builder()\n        .bucket("my-bucket")\n        .key("uploads/report.pdf")\n        .build(),\n        Paths.get("/local/path/report.pdf"));\n\n// MinIO SDK - من InputStream\ntry (InputStream is = new FileInputStream("/local/path/photo.jpg")) {\n    minio.putObject(PutObjectArgs.builder()\n                    

توصيات