Node.js में S3 और क्लाउड स्टोरेज: @aws-sdk/client-s3 लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

JavaScript (Node.js) में S3 और क्लाउड स्टोरेज के साथ काम करना

S3 (Simple Storage Service) क्लाउड में ऑब्जेक्ट स्टोरेज के लिए एक डी-फैक्टो मानक है। चाहे आप Amazon S3, Yandex Object Storage, Mail.ru Cloud Storage या MinIO जैसे लोकल समाधान का उपयोग करें, API एक जैसा ही रहता है। इस लेख में, हम आधिकारिक AWS SDK v3 का उपयोग करके Node.js से S3-संगत स्टोरेज से कनेक्ट करने का तरीका समझेंगे।

S3 क्या है और इसकी आवश्यकता क्यों है?

S3 आपको "बकेट" (buckets) में असीमित संख्या में फ़ाइलें (ऑब्जेक्ट) स्टोर करने की अनुमति देता है। प्रत्येक ऑब्जेक्ट का एक अद्वितीय कुंजी (पथ) और मेटाडेटा होता है। मुख्य उपयोग के मामले:

  • उपयोगकर्ता फ़ाइलों का भंडारण (अवतार, दस्तावेज़)
  • डेटाबेस और लॉग का बैकअप
  • वेब एप्लिकेशन के लिए स्थिर फ़ाइलें (इमेज, CSS, JS)
  • मीडिया फ़ाइलों का भंडारण (वीडियो, ऑडियो)

AWS SDK v3 की स्थापना और कॉन्फ़िगरेशन

संस्करण 3 से, AWS SDK मॉड्यूलर हो गया है। S3 के साथ काम करने के लिए, केवल एक पैकेज स्थापित करना पर्याप्त है:

npm install @aws-sdk/client-s3

आपको एक्सेस कुंजियों के साथ एनवायरनमेंट वेरिएबल्स की भी आवश्यकता होगी। इन्हें .env फ़ाइल में स्टोर करना सबसे अच्छा है:

AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_REGION=ru-central1
S3_ENDPOINT=https://storage.yandexcloud.net
S3_BUCKET=my-bucket

S3-संगत स्टोरेज से कनेक्ट करना

कस्टम endpoint के साथ S3 क्लाइंट बनाएं (Yandex Object Storage, MinIO और अन्य के लिए):

const { S3Client } = require('@aws-sdk/client-s3');
require('dotenv').config();

const s3Client = new S3Client({
  region: process.env.AWS_REGION,
  endpoint: process.env.S3_ENDPOINT,
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  },
  forcePathStyle: true, // MinIO और कुछ S3-संगत स्टोरेज के लिए महत्वपूर्ण
});

module.exports = s3Client;

S3 के साथ मुख्य ऑपरेशन

1. फ़ाइल अपलोड करना (PutObject)

बफर या स्ट्रीम से फ़ाइल अपलोड करें:

const { PutObjectCommand } = require('@aws-sdk/client-s3');
const fs = require('fs');

async function uploadFile(filePath, key) {
  const fileContent = fs.readFileSync(filePath);
  
  const command = new PutObjectCommand({
    Bucket: process.env.S3_BUCKET,
    Key: key,
    Body: fileContent,
    ContentType: 'image/png', // सही MIME-टाइप निर्दिष्ट करें
  });

  try {
    const response = await s3Client.send(command);
    console.log('फ़ाइल अपलोड हुई:', response.$metadata.httpStatusCode);
    return `https://storage.yandexcloud.net/${process.env.S3_BUCKET}/${key}`;
  } catch (err) {
    console.error('अपलोड त्रुटि:', err);
  }
}

2. फ़ाइल डाउनलोड करना (GetObject)

ऑब्जेक्ट प्राप्त करें और इसे स्थानीय रूप से सहेजें:

const { GetObjectCommand } = require('@aws-sdk/client-s3');
const fs = require('fs');
const stream = require('stream');
const { promisify } = require('util');
const pipeline = promisify(stream.pipeline);

async function downloadFile(key, destinationPath) {
  const command = new GetObjectCommand({
    Bucket: process.env.S3_BUCKET,
    Key: key,
  });

  try {
    const response = await s3Client.send(command);
    const writeStream = fs.createWriteStream(destinationPath);
    await pipeline(response.Body, writeStream);
    console.log('फ़ाइल डाउनलोड हुई:', destinationPath);
  } catch (err) {
    console.error('डाउनलोड त्रुटि:', err);
  }
}

3. ऑब्जेक्ट की सूची प्राप्त करना (ListObjectsV2)

बकेट में फ़ाइलें प्रदर्शित करने के लिए उपयोगी:

const { ListObjectsV2Command } = require('@aws-sdk/client-s3');

async function listFiles(prefix = '') {
  const command = new ListObjectsV2Command({
    Bucket: process.env.S3_BUCKET,
    Prefix: prefix,
    MaxKeys: 100,
  });

  try {
    const response = await s3Client.send(command);
    if (response.Contents) {
      return response.Contents.map(item => ({                    

अनुशंसाएँ