हिन्दी
हिन्दी
Appearance
हिन्दी
हिन्दी
Appearance
AWS SDK का उपयोग करके IPFS Ninja पर फाइलें अपलोड, डाउनलोड और प्रबंधित करें — वही कोड जो आप Amazon S3 के लिए उपयोग करते हैं।
https://s3.ipfs.ninjaS3 API प्रमाणीकरण के लिए आपकी IPFS Ninja API कुंजी का उपयोग करता है। आपकी API कुंजी access key और secret key दोनों के रूप में काम करती है।
आपकी कुंजी इस तरह दिखती है:
bws_628bba35e9e0079d9ff9c392b1b55a7b
├──────────┘└──────────────────────────┘
prefix (12 chars) rest of key| AWS पैरामीटर | मान | उदाहरण |
|---|---|---|
accessKeyId | आपकी API कुंजी के पहले 12 अक्षर | bws_628bba35 |
secretAccessKey | पूरी API कुंजी (सभी 36 अक्षर) | bws_628bba35e9e0079d9ff9c392b1b55a7b |
region | हमेशा us-east-1 | us-east-1 |
WARNING
पूरी API कुंजी केवल एक बार दिखाई जाती है जब आप इसे बनाते हैं। यदि आप इसे खो देते हैं, तो कुंजी हटाएं और API कुंजियां पेज से नई बनाएं।
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: QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1XyS3 buckets आपके IPFS Ninja फोल्डरों से मैप होते हैं। जब आप किसी bucket में फाइल अपलोड करते हैं, तो वह संबंधित फोल्डर में संग्रहीत होती है। जब आप bucket के ऑब्जेक्ट्स सूचीबद्ध करते हैं, तो आप उस फोल्डर की फाइलें देखते हैं।
| S3 ऑपरेशन | IPFS Ninja समकक्ष |
|---|---|
CreateBucket | नया फोल्डर बनाएं |
ListBuckets | अपने फोल्डर सूचीबद्ध करें |
DeleteBucket | फोल्डर और उसकी सभी फाइलें हटाएं |
PutObject bucket में | फोल्डर में फाइल अपलोड करें |
ListObjectsV2 bucket पर | फोल्डर की फाइलें सूचीबद्ध करें |
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) का उपयोग करें।
IPFS पर फाइल अपलोड करें। फाइल पिन की जाती है, सुरक्षा-स्कैन की जाती है, और CID ETag तथा x-amz-meta-cid हेडर में लौटाया जाता है।
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);# 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"किसी फाइल को उसकी कुंजी (फाइलनाम) या CID द्वारा डाउनलोड करें।
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);कंटेंट डाउनलोड किए बिना फाइल का मेटाडेटा प्राप्त करें।
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);IPFS से किसी फाइल को अनपिन करें और अपने खाते से हटाएं।
import { DeleteObjectCommand } from "@aws-sdk/client-s3";
await s3.send(new DeleteObjectCommand({
Bucket: "my-project",
Key: "photo.png"
}));वैकल्पिक प्रीफिक्स फ़िल्टरिंग और पेजिनेशन के साथ bucket की फाइलें सूचीबद्ध करें।
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 का उपयोग करके बड़ी फाइलें (5 GB तक) अपलोड करें। AWS SDK इसे स्वचालित रूप से संभालता है:
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);या पार्ट्स को मैन्युअल रूप से नियंत्रित करें:
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 }]
}
}));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())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 | IPFS Ninja S3 |
|---|---|---|
| स्टोरेज मॉडल | परिवर्तनीय ऑब्जेक्ट्स | कंटेंट-एड्रेस्ड (अपरिवर्तनीय CID) |
| ओवरराइट व्यवहार | ऑब्जेक्ट को स्थान पर बदलता है | नया CID बनाता है, पुराना CID अभी भी सुलभ |
| वर्शनिंग | समर्थित | समर्थित नहीं (वर्शनिंग के लिए CID का उपयोग करें) |
| सर्वर-साइड एन्क्रिप्शन | समर्थित | समर्थित नहीं (कंटेंट IPFS पर है) |
| लाइफसाइकल नीतियां | समर्थित | समर्थित नहीं |
| Bucket नीतियां / ACL | समर्थित | गेटवे एक्सेस मोड का उपयोग करें |
| प्रीसाइन्ड URL | समर्थित | साइन्ड अपलोड टोकन का उपयोग करें |
| अधिकतम ऑब्जेक्ट आकार | 5 TB | 5 GB (multipart), 100 MB (सिंगल PUT) |
| रीजन | मल्टी-रीजन | केवल us-east-1 |
ETag मान | MD5 हैश | IPFS CID |
| अतिरिक्त हेडर | मानक S3 | x-amz-meta-cid (IPFS CID) |
अपने S3 क्लाइंट कॉन्फ़िगरेशन को बदलें:
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 कॉल बिना किसी बदलाव के काम करते हैं।
Endpoint URL बदलें:
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
});