Arbeit mit S3 und Cloud-Speichern in TypeScript
Moderne Webanwendungen nutzen zunehmend Cloud-Objektspeicher zum Speichern von Dateien, Bildern, Backups und statischen Inhalten. Amazon S3 (Simple Storage Service) ist der De-facto-Standard in diesem Bereich, und seine API wird von den meisten Cloud-Anbietern und lokalen Lösungen wie MinIO, DigitalOcean Spaces oder Yandex Object Storage unterstützt. In diesem Artikel betrachten wir, wie man mit S3-kompatiblen Speichern in TypeScript arbeitet, unter Verwendung des offiziellen AWS SDK und alternativer Bibliotheken.
Auswahl der Bibliothek für die Arbeit mit S3 in TypeScript
Für die Interaktion mit S3 aus TypeScript gibt es mehrere beliebte Lösungen:
- @aws-sdk/client-s3 — offizielles SDK von Amazon, in TypeScript geschrieben, modular und modern.
- aws-sdk — klassische Version des SDK (v2), die noch unterstützt wird, aber es wird empfohlen, auf v3 umzusteigen.
- minio — Client-Bibliothek für MinIO und beliebige S3-kompatible Speicher, einfach und leichtgewichtig.
- s3-client — minimalistische Wrapper über die fetch API für die Arbeit mit S3.
Wir konzentrieren uns auf @aws-sdk/client-s3 als das aktuellste und leistungsfähigste Werkzeug und zeigen auch Beispiele mit minio für Fälle, in denen eine leichte Alternative benötigt wird.
Installation und Konfiguration
Installieren Sie die erforderlichen Pakete über npm:
npm install @aws-sdk/client-s3 @aws-sdk/lib-storagenpm install --save-dev @types/node typescriptFür die Arbeit mit MinIO:
npm install minioErstellen wir nun einen grundlegenden S3-Client. Stellen Sie sicher, dass Sie Umgebungsvariablen oder eine Konfiguration mit Zugriffsschlüsseln haben.
Beispiel 1: Initialisierung des S3-Clients
import { S3Client } from "@aws-sdk/client-s3";
const s3Client = new S3Client({ region: process.env.AWS_REGION || "us-east-1", credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID!, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!, }, // Für MinIO oder lokales S3 geben Sie den Endpunkt an: // endpoint: "http://localhost:9000", // forcePathStyle: true,});
export default s3Client;Beachten Sie den Parameter forcePathStyle — er ist für MinIO und einige andere Nicht-AWS-Speicher erforderlich.
Beispiel 2: Hochladen einer Datei in S3
Zum Hochladen einer Datei verwenden wir den Befehl PutObjectCommand:
import { PutObjectCommand } from "@aws-sdk/client-s3";import s3Client from "./s3Client";
async function uploadFile(bucket: string, key: string, body: Buffer | string) { const command = new PutObjectCommand({ Bucket: bucket, Key: key, Body: body, ContentType: "application/octet-stream", });
try { const response = await s3Client.send(command); console.log("Datei hochgeladen:", response.$metadata.httpStatusCode); return response; } catch (error) { console.error("Fehler beim Hochladen:", error); throw error; }}
// Verwendung:await uploadFile("my-bucket", "uploads/image.png", bufferFromFile);Für das Streaming-Hochladen großer Dateien verwenden Sie @aws-sdk/lib-storage:
import { Upload } from "@aws-sdk/lib-storage";import { Readable } from "stream";
const upload = new Upload({ client: s3Client, params: { Bucket: "my-bucket", Key: "large-file.zip", Body: Readable.from(fileStream), },});
upload.on("httpUploadProgress", (progress) => { console.log(`Hochgeladen: ${progress.loaded} von ${progress.total}`);});
await upload.done();Beispiel 3: Herunterladen einer Datei
Zum Abrufen eines Objekts aus dem Speicher verwenden wir GetObjectCommand:
Auch in der Bibliothek
Caching in Kotlin: Redis, Caffeine und Ehcache – ein vollständiger Leitfaden
Elasticsearch-Client für Java: Vollständige Anleitung zur Arbeit mit dem Java Client
PDF-Generierung in JavaScript: Die Bibliothek PDFKit
Arbeiten mit Excel in Java: Apache POI und Alternativen
OpenAI SDK für JavaScript (Node.js): Komplettguide mit Beispielen
Empfehlungen