Skip to content

S3 संगतता

AWS SDK का उपयोग करके IPFS Ninja पर फाइलें अपलोड, डाउनलोड और प्रबंधित करें — वही कोड जो आप Amazon S3 के लिए उपयोग करते हैं।

Endpoint

https://s3.ipfs.ninja

क्रेडेंशियल्स

S3 API प्रमाणीकरण के लिए आपकी IPFS Ninja API कुंजी का उपयोग करता है। आपकी API कुंजी access key और secret key दोनों के रूप में काम करती है।

अपने क्रेडेंशियल्स कैसे प्राप्त करें

  1. डैशबोर्ड > API कुंजियां पर जाएं
  2. Create API key पर क्लिक करें और एक नाम दें (जैसे "S3 एक्सेस")
  3. पूरी कुंजी तुरंत कॉपी करें — यह केवल एक बार दिखाई जाती है और बाद में प्राप्त नहीं की जा सकती

आपकी कुंजी इस तरह दिखती है:

bws_628bba35e9e0079d9ff9c392b1b55a7b
├──────────┘└──────────────────────────┘
 prefix (12 chars)    rest of key

AWS क्रेडेंशियल्स से मैपिंग

AWS पैरामीटरमानउदाहरण
accessKeyIdआपकी API कुंजी के पहले 12 अक्षरbws_628bba35
secretAccessKeyपूरी API कुंजी (सभी 36 अक्षर)bws_628bba35e9e0079d9ff9c392b1b55a7b
regionहमेशा us-east-1us-east-1

WARNING

पूरी API कुंजी केवल एक बार दिखाई जाती है जब आप इसे बनाते हैं। यदि आप इसे खो देते हैं, तो कुंजी हटाएं और API कुंजियां पेज से नई बनाएं।

त्वरित शुरुआत

javascript
import { S3Client, PutObjectCommand, GetObjectCommand } from "@aws-sdk/client-s3";

const s3 = new S3Client({
  endpoint: "https://s3.ipfs.ninja",
  credentials: {
    accessKeyId: "bws_628bba35",
    secretAccessKey: "bws_628bba35e9e0079d9ff9c392b1b55a7b"
  },
  region: "us-east-1",
  forcePathStyle: true
});

// Upload a file
const put = await s3.send(new PutObjectCommand({
  Bucket: "my-project",
  Key: "hello.json",
  Body: JSON.stringify({ hello: "IPFS" }),
  ContentType: "application/json"
}));

console.log("CID:", put.Metadata?.cid);
// CID: QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy

Buckets = फोल्डर

S3 buckets आपके IPFS Ninja फोल्डरों से मैप होते हैं। जब आप किसी bucket में फाइल अपलोड करते हैं, तो वह संबंधित फोल्डर में संग्रहीत होती है। जब आप bucket के ऑब्जेक्ट्स सूचीबद्ध करते हैं, तो आप उस फोल्डर की फाइलें देखते हैं।

S3 ऑपरेशनIPFS Ninja समकक्ष
CreateBucketनया फोल्डर बनाएं
ListBucketsअपने फोल्डर सूचीबद्ध करें
DeleteBucketफोल्डर और उसकी सभी फाइलें हटाएं
PutObject bucket मेंफोल्डर में फाइल अपलोड करें
ListObjectsV2 bucket परफोल्डर की फाइलें सूचीबद्ध करें
javascript
import { ListBucketsCommand, CreateBucketCommand, PutObjectCommand } from "@aws-sdk/client-s3";

// Create a bucket (= create a folder)
await s3.send(new CreateBucketCommand({ Bucket: "nft-metadata" }));

// Upload a file into the folder
await s3.send(new PutObjectCommand({
  Bucket: "nft-metadata",      // ← folder name
  Key: "token-42.json",        // ← filename within the folder
  Body: JSON.stringify({ name: "My NFT #42" })
}));

// List buckets (= list your folders)
const { Buckets } = await s3.send(new ListBucketsCommand({}));
console.log(Buckets);
// [{ Name: "nft-metadata", CreationDate: "2026-04-13T..." }]

TIP

S3 API के माध्यम से बनाए गए फोल्डर वही फोल्डर हैं जो आपके डैशबोर्ड में दिखाई देते हैं। आप S3 API, REST API या वेब इंटरफेस से फाइलें व्यवस्थित कर सकते हैं — ये सभी एक ही फोल्डर सिस्टम साझा करते हैं।

INFO

Amazon S3 के विपरीत, IPFS Ninja फोल्डर डिफ़ॉल्ट रूप से फ्लैट होते हैं। नेस्टेड संरचनाएं बनाने के लिए, REST API के फोल्डर endpoints का उपयोग parentFolderId के साथ करें। S3 API से, फोल्डर के भीतर व्यवस्थित करने के लिए कुंजी प्रीफिक्स (जैसे images/photo.png) का उपयोग करें।

समर्थित ऑपरेशन

PutObject

IPFS पर फाइल अपलोड करें। फाइल पिन की जाती है, सुरक्षा-स्कैन की जाती है, और CID ETag तथा x-amz-meta-cid हेडर में लौटाया जाता है।

javascript
import { PutObjectCommand } from "@aws-sdk/client-s3";
import fs from "fs";

const result = await s3.send(new PutObjectCommand({
  Bucket: "my-project",
  Key: "photo.png",
  Body: fs.readFileSync("photo.png"),
  ContentType: "image/png"
}));

console.log("CID:", result.ETag);
bash
# curl equivalent
curl -X PUT "https://s3.ipfs.ninja/my-project/photo.png" \
  --data-binary @photo.png \
  -H "Content-Type: image/png" \
  --aws-sigv4 "aws:amz:us-east-1:s3" \
  --user "bws_628bba35:bws_628bba35e9e0079d9ff9c392b1b55a7b"

GetObject

किसी फाइल को उसकी कुंजी (फाइलनाम) या CID द्वारा डाउनलोड करें।

javascript
import { GetObjectCommand } from "@aws-sdk/client-s3";

const result = await s3.send(new GetObjectCommand({
  Bucket: "my-project",
  Key: "photo.png"
}));

const body = await result.Body.transformToByteArray();
console.log("Size:", body.length);
console.log("CID:", result.Metadata?.cid);

HeadObject

कंटेंट डाउनलोड किए बिना फाइल का मेटाडेटा प्राप्त करें।

javascript
import { HeadObjectCommand } from "@aws-sdk/client-s3";

const head = await s3.send(new HeadObjectCommand({
  Bucket: "my-project",
  Key: "photo.png"
}));

console.log("Size:", head.ContentLength);
console.log("Type:", head.ContentType);
console.log("CID:", head.Metadata?.cid);

DeleteObject

IPFS से किसी फाइल को अनपिन करें और अपने खाते से हटाएं।

javascript
import { DeleteObjectCommand } from "@aws-sdk/client-s3";

await s3.send(new DeleteObjectCommand({
  Bucket: "my-project",
  Key: "photo.png"
}));

ListObjectsV2

वैकल्पिक प्रीफिक्स फ़िल्टरिंग और पेजिनेशन के साथ bucket की फाइलें सूचीबद्ध करें।

javascript
import { ListObjectsV2Command } from "@aws-sdk/client-s3";

const list = await s3.send(new ListObjectsV2Command({
  Bucket: "my-project",
  Prefix: "images/",
  MaxKeys: 100
}));

for (const obj of list.Contents ?? []) {
  console.log(obj.Key, obj.Size, obj.ETag); // ETag = CID
}

Multipart Upload

Multipart upload का उपयोग करके बड़ी फाइलें (5 GB तक) अपलोड करें। AWS SDK इसे स्वचालित रूप से संभालता है:

javascript
import { Upload } from "@aws-sdk/lib-storage";
import fs from "fs";

const upload = new Upload({
  client: s3,
  params: {
    Bucket: "my-project",
    Key: "large-dataset.tar.gz",
    Body: fs.createReadStream("large-dataset.tar.gz"),
    ContentType: "application/gzip"
  },
  partSize: 10 * 1024 * 1024, // 10 MB per part
});

upload.on("httpUploadProgress", (progress) => {
  console.log(`Uploaded ${progress.loaded} of ${progress.total} bytes`);
});

const result = await upload.done();
console.log("CID:", result.ETag);

या पार्ट्स को मैन्युअल रूप से नियंत्रित करें:

javascript
import {
  CreateMultipartUploadCommand,
  UploadPartCommand,
  CompleteMultipartUploadCommand
} from "@aws-sdk/client-s3";

// 1. Start
const { UploadId } = await s3.send(new CreateMultipartUploadCommand({
  Bucket: "my-project",
  Key: "big-file.bin"
}));

// 2. Upload parts
const part1 = await s3.send(new UploadPartCommand({
  Bucket: "my-project",
  Key: "big-file.bin",
  UploadId,
  PartNumber: 1,
  Body: chunk1
}));

// 3. Complete
const result = await s3.send(new CompleteMultipartUploadCommand({
  Bucket: "my-project",
  Key: "big-file.bin",
  UploadId,
  MultipartUpload: {
    Parts: [{ PartNumber: 1, ETag: part1.ETag }]
  }
}));

Python उदाहरण

python
import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="https://s3.ipfs.ninja",
    aws_access_key_id="bws_628bba35",
    aws_secret_access_key="bws_628bba35e9e0079d9ff9c392b1b55a7b",
    region_name="us-east-1"
)

# Upload
s3.put_object(
    Bucket="my-project",
    Key="data.json",
    Body=b'{"hello": "IPFS"}',
    ContentType="application/json"
)

# List files
response = s3.list_objects_v2(Bucket="my-project")
for obj in response.get("Contents", []):
    print(obj["Key"], obj["Size"])

# Download
result = s3.get_object(Bucket="my-project", Key="data.json")
print(result["Body"].read())

Go उदाहरण

go
package main

import (
    "context"
    "fmt"
    "strings"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/credentials"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
    client := s3.New(s3.Options{
        BaseEndpoint: aws.String("https://s3.ipfs.ninja"),
        Region:       "us-east-1",
        Credentials:  credentials.NewStaticCredentialsProvider("bws_628bba35", "bws_628bba35e9e0...", ""),
        UsePathStyle: true,
    })

    _, err := client.PutObject(context.TODO(), &s3.PutObjectInput{
        Bucket:      aws.String("my-project"),
        Key:         aws.String("hello.txt"),
        Body:        strings.NewReader("Hello, IPFS!"),
        ContentType: aws.String("text/plain"),
    })
    if err != nil {
        panic(err)
    }
    fmt.Println("Uploaded!")
}

Amazon S3 से अंतर

विशेषताAmazon S3IPFS Ninja S3
स्टोरेज मॉडलपरिवर्तनीय ऑब्जेक्ट्सकंटेंट-एड्रेस्ड (अपरिवर्तनीय CID)
ओवरराइट व्यवहारऑब्जेक्ट को स्थान पर बदलता हैनया CID बनाता है, पुराना CID अभी भी सुलभ
वर्शनिंगसमर्थितसमर्थित नहीं (वर्शनिंग के लिए CID का उपयोग करें)
सर्वर-साइड एन्क्रिप्शनसमर्थितसमर्थित नहीं (कंटेंट IPFS पर है)
लाइफसाइकल नीतियांसमर्थितसमर्थित नहीं
Bucket नीतियां / ACLसमर्थितगेटवे एक्सेस मोड का उपयोग करें
प्रीसाइन्ड URLसमर्थितसाइन्ड अपलोड टोकन का उपयोग करें
अधिकतम ऑब्जेक्ट आकार5 TB5 GB (multipart), 100 MB (सिंगल PUT)
रीजनमल्टी-रीजनकेवल us-east-1
ETag मानMD5 हैशIPFS CID
अतिरिक्त हेडरमानक S3x-amz-meta-cid (IPFS CID)

Amazon S3 से माइग्रेशन

अपने S3 क्लाइंट कॉन्फ़िगरेशन को बदलें:

diff
 const s3 = new S3Client({
+  endpoint: "https://s3.ipfs.ninja",
   credentials: {
-    accessKeyId: "AKIA...",
-    secretAccessKey: "wJalrX..."
+    accessKeyId: "bws_628bba35",
+    secretAccessKey: "bws_628bba35e9e0..."
   },
   region: "us-east-1",
+  forcePathStyle: true
 });

आपके मौजूदा PutObject, GetObject, ListObjectsV2 और DeleteObject कॉल बिना किसी बदलाव के काम करते हैं।

Filebase से माइग्रेशन

Endpoint URL बदलें:

diff
 const s3 = new S3Client({
-  endpoint: "https://s3.filebase.com",
+  endpoint: "https://s3.ipfs.ninja",
   credentials: {
-    accessKeyId: "FILEBASE_KEY",
-    secretAccessKey: "FILEBASE_SECRET"
+    accessKeyId: "bws_628bba35",
+    secretAccessKey: "bws_628bba35e9e0..."
   },
   region: "us-east-1",
   forcePathStyle: true
 });