TypeScript में S3 और क्लाउड स्टोरेज के साथ कार्य
आधुनिक वेब एप्लिकेशन फ़ाइलों, इमेज, बैकअप और स्थैतिक सामग्री को संग्रहीत करने के लिए तेज़ी से क्लाउड ऑब्जेक्ट स्टोरेज का उपयोग कर रहे हैं। Amazon S3 (Simple Storage Service) इस क्षेत्र में डी-फैक्टो मानक है, और इसका API अधिकांश क्लाउड प्रदाताओं और स्थानीय समाधानों जैसे MinIO, DigitalOcean Spaces या Yandex Object Storage द्वारा समर्थित है। इस लेख में, हम आधिकारिक AWS SDK और वैकल्पिक लाइब्रेरीज़ का उपयोग करके TypeScript में S3-संगत स्टोरेज के साथ काम करने का तरीका देखेंगे।
TypeScript में S3 के साथ काम करने के लिए लाइब्रेरी का चयन
TypeScript से S3 के साथ इंटरैक्ट करने के लिए कई लोकप्रिय समाधान हैं:
- @aws-sdk/client-s3 — Amazon का आधिकारिक SDK, TypeScript में लिखा गया, मॉड्यूलर और आधुनिक।
- aws-sdk — SDK का क्लासिक संस्करण (v2), जो अभी भी समर्थित है, लेकिन v3 पर स्विच करने की अनुशंसा की जाती है।
- minio — MinIO और किसी भी S3-संगत स्टोरेज के लिए क्लाइंट लाइब्रेरी, सरल और हल्की।
- s3-client — S3 के साथ काम करने के लिए fetch API पर एक न्यूनतम रैपर।
हम @aws-sdk/client-s3 पर ध्यान केंद्रित करेंगे क्योंकि यह सबसे अद्यतित और शक्तिशाली उपकरण है, और हल्के विकल्प की आवश्यकता होने पर minio के साथ उदाहरण भी दिखाएंगे।
स्थापना और कॉन्फ़िगरेशन
npm के माध्यम से आवश्यक पैकेज स्थापित करें:
npm install @aws-sdk/client-s3 @aws-sdk/lib-storagenpm install --save-dev @types/node typescriptMinIO के साथ काम करने के लिए:
npm install minioअब एक बेसिक S3 क्लाइंट बनाते हैं। सुनिश्चित करें कि आपके पास एक्सेस कुंजियों के साथ एनवायरनमेंट वेरिएबल या कॉन्फ़िगरेशन है।
उदाहरण 1: 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!, }, // MinIO या स्थानीय S3 के लिए endpoint निर्दिष्ट करें: // endpoint: "http://localhost:9000", // forcePathStyle: true,});
export default s3Client;forcePathStyle पैरामीटर पर ध्यान दें — यह MinIO और कुछ अन्य गैर-AWS स्टोरेज के लिए अनिवार्य है।
उदाहरण 2: S3 में फ़ाइल अपलोड करना
फ़ाइल अपलोड करने के लिए 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("फ़ाइल अपलोड हुई:", response.$metadata.httpStatusCode); return response; } catch (error) { console.error("अपलोड त्रुटि:", error); throw error; }}
// उपयोग:await uploadFile("my-bucket", "uploads/image.png", bufferFromFile);बड़ी फ़ाइलों की स्ट्रीमिंग अपलोड के लिए @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(`अपलोड हुआ: ${progress.loaded} में से ${progress.total}`);});
await upload.done();उदाहरण 3: फ़ाइल डाउनलोड करना
स्टोरेज से ऑब्जेक्ट प्राप्त करने के लिए GetObjectCommand का उपयोग करें:
पुस्तकालय में भी
अनुशंसाएँ