TypeScript में S3 और क्लाउड स्टोरेज के साथ काम करें: लाइब्रेरी, सेटअप और कोड उदाहरण
Amazon S3 API के साथ संगत क्लाउड ऑब्जेक्ट स्टोरेज आधुनिक वेब एप्लिकेशन में फ़ाइलों को स्टोर और डिलीवर करने का मानक बन गए हैं। TypeScript और Node.js इकोसिस्टम में S3 के साथ काम करने के लिए कई शक्तिशाली टूल मौजूद हैं। इस लेख में हम मुख्य लाइब्रेरी, उनका सेटअप और सामान्य कार्यों के लिए प्रैक्टिकल कोड उदाहरण देखेंगे: फ़ाइल अपलोड, डाउनलोड, डिलीट और बकेट मैनेजमेंट।
TypeScript में S3 के लिए मुख्य लाइब्रेरी
सबसे लोकप्रिय और आधिकारिक समाधान AWS SDK for JavaScript v3 है। यह लाइब्रेरी पूरी तरह से TypeScript में फिर से लिखी गई है, मॉड्यूलर है और tree-shaking को सपोर्ट करती है। इसका विकल्प MinIO JavaScript Client है — एक हल्की लाइब्रेरी जो S3 API के साथ पूरी तरह से संगत है और लोकल या self-hosted S3-संगत स्टोरेज (जैसे MinIO, Ceph, DigitalOcean Spaces) के लिए बढ़िया है।
सरल सीनारियो के लिए @aws-sdk/client-s3 का भी उपयोग कर सकते हैं — AWS SDK v3 का एक अलग पैकेज जिसमें सिर्फ S3 के लिए ज़रूरी फंक्शनैलिटी है।
इंस्टॉलेशन और इनिशियलाइज़ेशन
AWS SDK v3 के माध्यम से S3 के लिए मुख्य पैकेज इंस्टॉल करें:
npm install @aws-sdk/client-s3 @aws-sdk/credential-providers
MinIO के लिए:
npm install minio
AWS SDK v3 का उपयोग करके S3 क्लाइंट इनिशियलाइज़ करने का उदाहरण:
import { S3Client } from "@aws-sdk/client-s3";
import { fromEnv } from "@aws-sdk/credential-providers";
const s3Client = new S3Client({
region: "us-east-1",
credentials: fromEnv(), // AWS_ACCESS_KEY_ID और AWS_SECRET_ACCESS_KEY को एनवायरनमेंट वेरिएबल से लेता है
});
MinIO क्लाइंट इस तरह सेट होता है:
import * as Minio from "minio";
const minioClient = new Minio.Client({
endPoint: "play.min.io",
port: 9000,
useSSL: true,
accessKey: "YOUR_ACCESS_KEY",
secretKey: "YOUR_SECRET_KEY",
});
टाइपिंग और सख्त प्रकार
TypeScript का सबसे बड़ा फायदा सख्त टाइपिंग है। दोनों लाइब्रेरी सभी रिक्वेस्ट और रिस्पॉन्स के लिए पूरे टाइप प्रदान करती हैं। उदाहरण के लिए, S3 में फ़ाइल अपलोड करते समय आपको सभी पैरामीटर के लिए ऑटो-कम्प्लीशन मिलता है:
import { PutObjectCommand } from "@aws-sdk/client-s3";
const uploadParams: PutObjectCommand["input"] = {
Bucket: "my-bucket",
Key: "uploads/photo.jpg",
Body: fileBuffer,
ContentType: "image/jpeg",
ACL: "public-read",
};
const command = new PutObjectCommand(uploadParams);
const result = await s3Client.send(command);
मुख्य ऑपरेशन: अपलोड, डाउनलोड, डिलीट
1. फ़ाइल अपलोड करें
import { PutObjectCommand } from "@aws-sdk/client-s3";
async function uploadFile(bucket: string, key: string, body: Buffer | Uint8Array | string) {
const command = new PutObjectCommand({
Bucket: bucket,
Key: key,
Body: body,
});
return await s3Client.send(command);
}
// उपयोग का उदाहरण
const buffer = Buffer.from("Hello, S3!");
await uploadFile("my-bucket", "hello.txt", buffer);
2. फ़ाइल डाउनलोड करें
import { GetObjectCommand } from "@aws-sdk/client-s3";
async function downloadFile(bucket: string, key: string): Promise<Buffer> {
const command = new GetObjectCommand({ Bucket: bucket, Key: key });
const response = await s3Client.send(command);
return Buffer.from(await response.Body!.transformToByteArray());
}
// उदाहरण
const fileContent = await downloadFile("my-bucket", "hello.txt");
console.log(fileContent.toString());
3. फ़ाइल डिलीट करें
import { DeleteObjectCommand } from "@aws-sdk/client-s3";
async function deleteFile(bucket: string, key: string) {
const command = new DeleteObjectCommand({ Bucket: bucket, Key: