Kotlin में S3 और क्लाउड स्टोरेज: AWS SDK और Ktor S3 क्लाइंट

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में S3 और क्लाउड स्टोरेज के साथ काम करना

आधुनिक Kotlin डेवलपमेंट में अक्सर Amazon S3 (Simple Storage Service) प्रोटोकॉल के अनुकूल क्लाउड स्टोरेज के साथ इंटीग्रेशन की आवश्यकता होती है। ये AWS S3, MinIO, DigitalOcean Spaces, Yandex Object Storage और अन्य हो सकते हैं। इस लेख में हम दो मुख्य दृष्टिकोणों पर चर्चा करेंगे: Kotlin के लिए AWS SDK और Ktor पर आधारित हल्का क्लाइंट।

1. Kotlin के लिए AWS SDK (aws-sdk-kotlin)

Amazon का आधिकारिक SDK एक टाइप किया हुआ और एसिंक्रोनस API प्रदान करता है, जो Kotlin कोरूटीन को पूरी तरह से सपोर्ट करता है। S3 के साथ काम करने के लिए यह सबसे व्यापक समाधान है।

डिपेंडेंसी जोड़ना

build.gradle.kts में यह जोड़ें:

dependencies {
    implementation("aws.sdk.kotlin:s3:1.0.0")
    implementation("aws.smithy.kotlin:http-client-engine-ktor:1.0.0")
}

क्लाइंट इनिशियलाइज़ करना

import aws.sdk.kotlin.services.s3.S3Client
import aws.sdk.kotlin.services.s3.model.*

suspend fun createClient(): S3Client = S3Client.fromEnvironment {
    region = "ru-central1"
    // MinIO या अन्य S3-संगत स्टोरेज के लिए:
    endpointUrl = "https://storage.yandexcloud.net"
    // AWS_ACCESS_KEY_ID और AWS_SECRET_ACCESS_KEY एनवायरनमेंट वेरिएबल के माध्यम से कॉन्फ़िगरेशन
}

फ़ाइल अपलोड करना (PutObject)

suspend fun uploadFile(client: S3Client, bucket: String, key: String, filePath: String) {
    val fileBytes = java.io.File(filePath).readBytes()
    client.putObject(
        PutObjectRequest {
            this.bucket = bucket
            this.key = key
            this.body = fileBytes.toByteArray()
        }
    )
    println("फ़ाइल $key बकेट $bucket में अपलोड हो गई")
}

फ़ाइल डाउनलोड करना (GetObject)

suspend fun downloadFile(client: S3Client, bucket: String, key: String, savePath: String) {
    val response = client.getObject(
        GetObjectRequest {
            this.bucket = bucket
            this.key = key
        }
    )
    val bytes = response.body?.readAll()
    if (bytes != null) {
        java.io.File(savePath).writeBytes(bytes)
        println("फ़ाइल $key $savePath पर सेव हो गई")
    }
}

बकेट में ऑब्जेक्ट्स की सूची

suspend fun listObjects(client: S3Client, bucket: String): List<String> {
    val response = client.listObjectsV2(
        ListObjectsV2Request {
            this.bucket = bucket
        }
    )
    return response.contents?.map { it.key ?: "" } ?: emptyList()
}

2. Ktor S3 क्लाइंट (हल्का विकल्प)

अगर आपको AWS SDK की पूरी क्षमता की ज़रूरत नहीं है, तो आप ktor-client-s3 लाइब्रेरी के साथ Ktor का उपयोग कर सकते हैं। यह न्यूनतम वज़न और HTTP रिक्वेस्ट पर पूर्ण नियंत्रण देता है।

डिपेंडेंसी जोड़ना

dependencies {
    implementation("io.ktor:ktor-client-core:2.3.0")
    implementation("io.ktor:ktor-client-cio:2.3.0")
    implementation("io.ktor:ktor-client-content-negotiation:2.3.0")
    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0")
    // S3 रिक्वेस्ट साइन करने के लिए
    implementation("io.ktor:ktor-client-auth:2.3.0")
}

Ktor पर S3 क्लाइंट बनाना

import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import io.ktor.utils.io.*

class S3KtorClient(
    private val endpoint: String,
    private val accessKey: String,
    private val secretKey: String
) {
    private val client = HttpClient {
        install(io.ktor.client.plugins.auth.Auth) {
            basic {
                credentials {
                    username = accessKey
                    password = secretKey
                }
            }
        }
    }

    suspend fun putObject(bucket: String, key: String, data: ByteArray) {
        client.put("$endpoint/$bucket/$key") {
            setBody(ByteReadChannel(data))
            contentType(ContentT                    

अनुशंसाएँ