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 typescriptPour travailler avec MinIO :
npm install minioCré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 :
Aussi dans la bibliothèque
Apprentissage automatique en PHP : aperçu des bibliothèques pour l'intégration du ML
Client Elasticsearch pour Kotlin : intégration, exemples et fonctionnalités
GORM pour Go : guide complet avec exemples
MetricsKit — surveillance des applications Swift sur iOS/macOS
Bibliothèque standard Go (Golang) : aperçu complet
Recommendations