Arbeit mit S3 und Cloud-Speichern in Kotlin: AWS SDK und MinIO

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit S3 und Cloud-Speichern in Kotlin



Cloud-Objektspeicher, die mit dem Amazon S3-Protokoll (Simple Storage Service) kompatibel sind, sind zum De-facto-Standard für die Speicherung unstrukturierter Daten geworden: Bilder, Videos, Logs, Backups und Build-Artefakte. Im Kotlin-Ökosystem (JVM, Android, Kotlin Multiplatform) werden für die Interaktion mit S3 zwei Hauptansätze verwendet: das offizielle AWS SDK for Java/Kotlin und das leichte MinIO Java SDK. In diesem Artikel werden wir beide Optionen analysieren, Codebeispiele zeigen und Empfehlungen zur Auswahl geben.



1. AWS SDK for Java (Kotlin)



Das offizielle SDK von Amazon unterstützt alle S3-Funktionen, einschließlich Multithread-Upload, Lebenszyklusverwaltung, Versionierung und Verschlüsselung. Für Kotlin reicht es aus, die Abhängigkeit in build.gradle.kts hinzuzufügen:



dependencies {    implementation("software.amazon.awssdk:s3:2.27.0")    implementation("software.amazon.awssdk:auth:2.27.0")}


Basisbeispiel für das Hochladen einer Datei in einen S3-Bucket:



import software.amazon.awssdk.auth.credentials.AwsBasicCredentialsimport software.amazon.awssdk.auth.credentials.StaticCredentialsProviderimport software.amazon.awssdk.regions.Regionimport software.amazon.awssdk.services.s3.S3Clientimport software.amazon.awssdk.services.s3.model.PutObjectRequestimport java.nio.file.Paths

fun main() { val credentials = AwsBasicCredentials.create("ACCESS_KEY", "SECRET_KEY") val s3 = S3Client.builder() .region(Region.EU_CENTRAL_1) .credentialsProvider(StaticCredentialsProvider.create(credentials)) .build()

val request = PutObjectRequest.builder() .bucket("my-bucket") .key("uploads/photo.jpg") .contentType("image/jpeg") .build()

s3.putObject(request, Paths.get("/local/path/photo.jpg")) println("Datei hochgeladen")}


Herunterladen eines Objekts:



import software.amazon.awssdk.services.s3.model.GetObjectRequest

val getRequest = GetObjectRequest.builder() .bucket("my-bucket") .key("uploads/photo.jpg") .build()

s3.getObject(getRequest, Paths.get("/local/download/photo.jpg"))


2. MinIO Java SDK (S3-kompatibler Speicher)



MinIO ist ein leistungsstarker Open-Source-Objektspeicher, der vollständig mit der S3-API kompatibel ist. Sein SDK eignet sich für die Arbeit sowohl mit lokalem MinIO als auch mit AWS S3, DigitalOcean Spaces, Yandex Object Storage und anderen Anbietern. Fügen Sie die Abhängigkeit hinzu:



dependencies {    implementation("io.minio:minio:8.5.10")}


Beispiel für das Hochladen einer Datei mit dem MinIO SDK:



import io.minio.MinioClientimport io.minio.PutObjectArgsimport java.io.FileInputStream

fun main() { val minioClient = MinioClient.builder() .endpoint("https://play.min.io") .credentials("minioadmin", "minioadmin") .build()

val inputStream = FileInputStream("/local/data/report.pdf") minioClient.putObject( PutObjectArgs.builder() .bucket("documents") .`object`("reports/2024/report.pdf") .stream(inputStream, inputStream.available(), -1) .contentType("application/pdf") .build() ) println("Datei in MinIO hochgeladen")}


Herunterladen mit MinIO:



import io.minio.GetObjectArgsimport java.io.FileOutputStream

val getArgs = GetObjectArgs.builder() .bucket("documents") .`object`("reports/2024/report.pdf") .build()

val response = minioClient.getObject(getArgs)response.use { stream -> FileOutputStream("/local/download/report.pdf").use { output -> stream.transferTo(output) }}


3. Arbeiten mit öffentlichen Links und Gültigkeitsdauern



Generierung einer temporären URL (presigned URL) zum Herunterladen ohne A

Empfehlungen