Travailler avec S3 et les stockages cloud en TypeScript : bibliothèques, configuration et exemples de code
\n\nLes 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\nPrincipales bibliothèques pour travailler avec S3 en TypeScript
\n\nLa 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\nPour 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\nInstallation et initialisation
\n\nInstallons le package principal pour travailler avec S3 via AWS SDK v3 :
\n\nnpm install @aws-sdk/client-s3 @aws-sdk/credential-providers\n\nPour travailler avec MinIO :
\n\nnpm install minio\n\nExemple d'initialisation du client S3 avec 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(), // utilise AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY depuis les variables d'environnement\n});\n\nPour MinIO, le client se configure comme suit :
\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\nTypage et types stricts
\n\nL'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\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\nOpérations principales : téléchargement, téléchargement, suppression
\n\n1. Téléchargement d'un fichier (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// Exemple d'utilisation\nconst buffer = Buffer.from("Hello, S3!");\nawait uploadFile("my-bucket", "hello.txt", buffer);\n\n2. Téléchargement d'un fichier (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// Exemple\nconst fileContent = await downloadFile("my-bucket", "hello.txt");\nconsole.log(fileContent.toString());\n\n3. Suppression d'un fichier
\n\nimport { DeleteObjectCommand } from "@aws-sdk/client-s3";\n\nasync function deleteFile( Aussi dans la bibliothèque
Traitement d'images en Node.js : redimensionnement et recadrage avec Sharp et Jimp
Mise en cache en PHP : Redis, Memcached et solutions intégrées
Validation des données en Kotlin : bibliothèques, approches et exemples de code