Travailler avec S3 et les stockages cloud en TypeScript : guide complet

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



Les applications web modernes utilisent de plus en plus les stockages objets cloud pour stocker des fichiers, des images, des sauvegardes et du contenu statique. Amazon S3 (Simple Storage Service) est la norme de facto dans ce domaine, et son API est prise en charge par la plupart des fournisseurs cloud et des solutions locales, telles que MinIO, DigitalOcean Spaces ou Yandex Object Storage. Dans cet article, nous verrons comment travailler avec des stockages compatibles S3 en TypeScript, en utilisant le SDK AWS officiel et des bibliothèques alternatives.



Choix de la bibliothèque pour travailler avec S3 en TypeScript



Pour interagir avec S3 depuis TypeScript, il existe plusieurs solutions populaires :



  • @aws-sdk/client-s3 — le SDK officiel d'Amazon, écrit en TypeScript, modulaire et moderne.
  • aws-sdk — la version classique du SDK (v2), toujours prise en charge, mais il est recommandé de passer à la v3.
  • minio — une bibliothèque cliente pour MinIO et tout stockage compatible S3, simple et légère.
  • s3-client — un wrapper minimaliste autour de l'API fetch pour travailler avec S3.


Nous nous concentrerons sur @aws-sdk/client-s3 comme l'outil le plus actuel et le plus puissant, et nous montrerons également des exemples avec minio pour les cas où une alternative légère est nécessaire.



Installation et configuration



Installez les packages nécessaires via npm :



npm install @aws-sdk/client-s3 @aws-sdk/lib-storagenpm install --save-dev @types/node typescript


Pour travailler avec MinIO :



npm install minio


Créons maintenant un client S3 de base. Assurez-vous d'avoir des variables d'environnement ou une configuration avec des clés d'accès.



Exemple 1 : Initialisation du client S3



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!, }, // Pour MinIO ou un S3 local, spécifiez l'endpoint : // endpoint: "http://localhost:9000", // forcePathStyle: true,});

export default s3Client;


Notez le paramètre forcePathStyle — il est obligatoire pour MinIO et certains autres stockages non AWS.



Exemple 2 : Téléchargement d'un fichier vers S3



Pour télécharger un fichier, utilisez la commande 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("Fichier téléchargé :", response.$metadata.httpStatusCode); return response; } catch (error) { console.error("Erreur de téléchargement :", error); throw error; }}

// Utilisation :await uploadFile("my-bucket", "uploads/image.png", bufferFromFile);


Pour le téléchargement en flux de fichiers volumineux, utilisez @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(`Téléchargé : ${progress.loaded} sur ${progress.total}`);});

await upload.done();


Exemple 3 : Téléchargement d'un fichier



Pour récupérer un objet du stockage, utilisez GetObjectCommand :




                
    
    

Recommendations