Arbeit mit S3 und Cloud-Speichern in TypeScript: Bibliotheken und Beispiele

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 TypeScript: Bibliotheken, Einrichtung und Codebeispiele

\n\n

Cloud-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\n

Wichtigste Bibliotheken für die Arbeit mit S3 in TypeScript

\n\n

Die 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\n

Fü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\n

Installation und Initialisierung

\n\n

Installieren wir das Hauptpaket für die Arbeit mit S3 über das AWS SDK v3:

\n\n
npm install @aws-sdk/client-s3 @aws-sdk/credential-providers
\n\n

Für die Arbeit mit MinIO:

\n\n
npm install minio
\n\n

Beispiel für die Initialisierung eines S3-Clients mit dem AWS SDK v3:

\n\n
import { 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\n

Für den MinIO-Client erfolgt die Konfiguration wie folgt:

\n\n
import * 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\n

Typisierung und strenge Typen

\n\n

Einer 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\n
import { 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\n

Grundlegende Operationen: Hochladen, Herunterladen, Löschen

\n\n

1. Datei hochladen (Upload)

\n\n
import { 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\n

2. Datei herunterladen (Download)

\n\n
import { 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\n

3. Datei löschen

\n\n
import { DeleteObjectCommand } from "@aws-sdk/client-s3";\n\nasync function deleteFile(                    

Empfehlungen