Java में AWS SDK और MinIO के साथ S3 और क्लाउड स्टोरेज का उपयोग
Amazon S3 (Simple Storage Service) प्रोटोकॉल के अनुकूल क्लाउड ऑब्जेक्ट स्टोरेज, अनस्ट्रक्चर्ड डेटा जैसे इमेज, वीडियो, लॉग, बैकअप और बिल्ड आर्टिफैक्ट्स को स्टोर करने के लिए डी-फैक्टो मानक बन गए हैं। Java में ऐसे स्टोरेज के साथ इंटरैक्ट करने का मुख्य टूल AWS SDK for Java (S3 मॉड्यूल) है। हालांकि, लोकल डेवलपमेंट, टेस्टिंग या self-hosted समाधानों के लिए अक्सर MinIO का उपयोग किया जाता है - यह एक हाई-परफॉर्मेंस S3-संगत स्टोरेज है जिसका अपना Java क्लाइंट है। इस लेख में हम दोनों तरीकों पर चर्चा करेंगे।
1. तैयारी और डिपेंडेंसी जोड़ना
सबसे पहले, अपने pom.xml (Maven) में निम्नलिखित डिपेंडेंसी जोड़ें:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.30.0</version>
</dependency>
<!-- MinIO के लिए (AWS SDK का विकल्प) -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.17</version>
</dependency>
2. S3 क्लाइंट बनाना
क्लाइंट बनाने के दो तरीके देखें: Amazon S3 (AWS) और MinIO (लोकल/कस्टम स्टोरेज) के लिए।
2.1. Amazon S3 (AWS SDK) के लिए क्लाइंट
स्टैटिक बिल्डर का उपयोग करें, जिसमें रीजन और ऑथेंटिकेशन का तरीका (जैसे एनवायरनमेंट वेरिएबल या IAM प्रोफाइल) निर्दिष्ट करें।
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
public class AwsS3Example {
public static S3Client createAwsS3Client() {
return S3Client.builder()
.region(Region.EU_CENTRAL_1) // Frankfurt
.build(); // डिफ़ॉल्ट प्रोवाइडर चेन का उपयोग करता है
}
}
2.2. MinIO के लिए क्लाइंट
MinIO में endpoint, access key और secret key स्पष्ट रूप से देना आवश्यक है।
import io.minio.MinioClient;
public class MinioExample {
public static MinioClient createMinioClient() {
return MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("minioadmin", "minioadmin")
.build();
}
}
3. बकेट और ऑब्जेक्ट के साथ मुख्य ऑपरेशन
चुने गए क्लाइंट के बावजूद, S3 के साथ काम करने का तर्क सार्वभौमिक है। आइए मुख्य परिदृश्यों पर नज़र डालें।
3.1. बकेट की मौजूदगी जांचना और बनाना
// AWS SDK
public boolean bucketExists(S3Client s3, String bucketName) {
return s3.headBucket(HeadBucketRequest.builder()
.bucket(bucketName)
.build())
.sdkHttpResponse().isSuccessful();
}
// MinIO SDK
public boolean bucketExists(MinioClient minio, String bucketName) {
return minio.bucketExists(BucketExistsArgs.builder()
.bucket(bucketName)
.build());
}
// बकेट बनाना (AWS)
s3.createBucket(CreateBucketRequest.builder()
.bucket("my-unique-bucket-123")
.createBucketConfiguration(
CreateBucketConfiguration.builder()
.locationConstraint("eu-central-1")
.build())
.build());
// बकेट बनाना (MinIO)
minio.makeBucket(MakeBucketArgs.builder()
.bucket("my-local-bucket")
.build());
3.2. फ़ाइल अपलोड करना
लोकल पथ से या डेटा स्ट्रीम से फ़ाइल अपलोड करना।
// AWS SDK - फ़ाइल से
s3.putObject(PutObjectRequest.builder()
.bucket("my-bucket")
.key("uploads/report.pdf")
.build(),
Paths.get("/local/path/report.pdf"));
// MinIO SDK - InputStream से
try (InputStream is = new FileInputStream("/local/path/photo.jpg")) {
minio.putObject(PutObjectArgs.builder()
.bucket("my-bucket")
.object("images/photo.jpg")
.stream(is, file.length(), -1)