Travailler avec S3 et les stockages cloud en TypeScript : bibliothèques et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec S3 et les stockages cloud en TypeScript : bibliothèques, configuration et exemples de code

\n\n

Les stockages objets cloud compatibles avec l'API Amazon S3 sont devenus le standard de facto pour le stockage et la livraison de fichiers dans les applications web modernes. Dans l'écosystème TypeScript et Node.js, il existe plusieurs outils puissants pour travailler avec S3. Dans cet article, nous allons passer en revue les principales bibliothèques, leur configuration et fournir des exemples de code pratiques pour les tâches typiques : téléchargement, téléchargement, suppression de fichiers et gestion des buckets.

\n\n

Principales bibliothèques pour travailler avec S3 en TypeScript

\n\n

La solution la plus populaire et officielle est AWS SDK for JavaScript v3. Cette bibliothèque a été entièrement réécrite en TypeScript, est modulaire et prend en charge le tree-shaking. Une alternative est MinIO JavaScript Client — une bibliothèque légère, entièrement compatible avec l'API S3, qui est parfaite pour travailler avec des stockages locaux ou auto-hébergés compatibles S3 (par exemple, MinIO, Ceph, DigitalOcean Spaces).

\n\n

Pour les scénarios simples, vous pouvez également utiliser @aws-sdk/client-s3 — un package distinct de l'AWS SDK v3 qui contient uniquement les fonctionnalités nécessaires pour S3.

\n\n

Installation et initialisation

\n\n

Installons le package principal pour travailler avec S3 via AWS SDK v3 :

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

Pour travailler avec MinIO :

\n\n
npm install minio
\n\n

Exemple d'initialisation du client S3 avec 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(), // utilise AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY depuis les variables d'environnement\n});
\n\n

Pour MinIO, le client se configure comme suit :

\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

Typage et types stricts

\n\n

L'un des principaux avantages de TypeScript est le typage strict. Les deux bibliothèques fournissent des types complets pour toutes les requêtes et réponses. Par exemple, lors du téléchargement d'un fichier vers S3, vous obtenez la complétion automatique pour tous les paramètres :

\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

Opérations principales : téléchargement, téléchargement, suppression

\n\n

1. Téléchargement d'un fichier (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// Exemple d'utilisation\nconst buffer = Buffer.from("Hello, S3!");\nawait uploadFile("my-bucket", "hello.txt", buffer);
\n\n

2. Téléchargement d'un fichier (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// Exemple\nconst fileContent = await downloadFile("my-bucket", "hello.txt");\nconsole.log(fileContent.toString());
\n\n

3. Suppression d'un fichier

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

Recommendations