Arbeit mit S3 und Cloud-Speichern in TypeScript: Bibliotheken, Einrichtung und Codebeispiele
\n\nCloud-Objektspeicher, die mit der Amazon S3 API kompatibel sind, sind zum De-facto-Standard für die Speicherung und Bereitstellung von Dateien in modernen Webanwendungen geworden. Im Ökosystem von TypeScript und Node.js gibt es mehrere leistungsstarke Werkzeuge für die Arbeit mit S3. In diesem Artikel analysieren wir die wichtigsten Bibliotheken, ihre Einrichtung und geben praktische Codebeispiele für typische Aufgaben: Hochladen, Herunterladen, Löschen von Dateien und Bucket-Verwaltung.
\n\nWichtigste Bibliotheken für die Arbeit mit S3 in TypeScript
\n\nDie beliebteste und offizielle Lösung ist das AWS SDK for JavaScript v3. Diese Bibliothek wurde vollständig in TypeScript neu geschrieben, ist modular und unterstützt Tree-Shaking. Eine Alternative ist der MinIO JavaScript Client – eine leichtgewichtige Bibliothek, die vollständig mit der S3 API kompatibel ist und sich hervorragend für die Arbeit mit lokalen oder selbst gehosteten S3-kompatiblen Speichern (z. B. MinIO, Ceph, DigitalOcean Spaces) eignet.
\n\nFür einfache Szenarien kann auch @aws-sdk/client-s3 verwendet werden – ein separates Paket aus dem AWS SDK v3, das nur die notwendige Funktionalität für S3 enthält.
\n\nInstallation und Initialisierung
\n\nInstallieren wir das Hauptpaket für die Arbeit mit S3 über das AWS SDK v3:
\n\nnpm install @aws-sdk/client-s3 @aws-sdk/credential-providers\n\nFür die Arbeit mit MinIO:
\n\nnpm install minio\n\nBeispiel für die Initialisierung eines S3-Clients mit dem AWS SDK v3:
\n\nimport { S3Client } from "@aws-sdk/client-s3";\nimport { fromEnv } from "@aws-sdk/credential-providers";\n\nconst s3Client = new S3Client({\n region: "us-east-1",\n credentials: fromEnv(), // verwendet AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY aus Umgebungsvariablen\n});\n\nFür den MinIO-Client erfolgt die Konfiguration wie folgt:
\n\nimport * as Minio from "minio";\n\nconst minioClient = new Minio.Client({\n endPoint: "play.min.io",\n port: 9000,\n useSSL: true,\n accessKey: "YOUR_ACCESS_KEY",\n secretKey: "YOUR_SECRET_KEY",\n});\n\nTypisierung und strenge Typen
\n\nEiner der Hauptvorteile von TypeScript ist die strenge Typisierung. Beide Bibliotheken bieten vollständige Typen für alle Anfragen und Antworten. Beim Hochladen einer Datei in S3 erhalten Sie beispielsweise eine Autovervollständigung für alle Parameter:
\n\nimport { PutObjectCommand } from "@aws-sdk/client-s3";\n\nconst uploadParams: PutObjectCommand["input"] = {\n Bucket: "my-bucket",\n Key: "uploads/photo.jpg",\n Body: fileBuffer,\n ContentType: "image/jpeg",\n ACL: "public-read",\n};\n\nconst command = new PutObjectCommand(uploadParams);\nconst result = await s3Client.send(command);\n\nGrundlegende Operationen: Hochladen, Herunterladen, Löschen
\n\n1. Datei hochladen (Upload)
\n\nimport { PutObjectCommand } from "@aws-sdk/client-s3";\n\nasync function uploadFile(bucket: string, key: string, body: Buffer | Uint8Array | string) {\n const command = new PutObjectCommand({\n Bucket: bucket,\n Key: key,\n Body: body,\n });\n return await s3Client.send(command);\n}\n\n// Beispiel zur Verwendung\nconst buffer = Buffer.from("Hello, S3!");\nawait uploadFile("my-bucket", "hello.txt", buffer);\n\n2. Datei herunterladen (Download)
\n\nimport { GetObjectCommand } from "@aws-sdk/client-s3";\n\nasync function downloadFile(bucket: string, key: string): Promise<Buffer> {\n const command = new GetObjectCommand({ Bucket: bucket, Key: key });\n const response = await s3Client.send(command);\n return Buffer.from(await response.Body!.transformToByteArray());\n}\n\n// Beispiel\nconst fileContent = await downloadFile("my-bucket", "hello.txt");\nconsole.log(fileContent.toString());\n\n3. Datei löschen
\n\nimport { DeleteObjectCommand } from "@aws-sdk/client-s3";\n\nasync function deleteFile( Auch in der Bibliothek
Arbeiten mit ZIP/Archiven in C++: die Bibliotheken libzip und zlib
Kryptografie in TypeScript: Überblick über die Bibliothek crypto-js
Java Aufgabenplaner: Quartz Scheduler – vollständiger Leitfaden
Kotlin Symbol Processing (KSP) für Kotlin: Komplettguide mit Beispielen