Skip to content

S3 ühilduvus

Kasuta AWS SDK-d failide üleslaadimiseks, allalaadimiseks ja haldamiseks IPFS Ninja's — sama koodiga, mida kasutad Amazon S3 jaoks.

Endpoint

https://s3.ipfs.ninja

Volitused

S3 API kasutab autentimiseks sinu IPFS Ninja API-võtit. Sinu API-võti toimib nii access key kui ka secret key'na.

Kuidas volitusi saada

  1. Mine Dashboard > API Keys
  2. Kliki Create API key ja anna sellele nimi (nt „S3 ligipääs")
  3. Kopeeri kogu võti kohe — seda näidatakse ainult üks kord ja hiljem ei saa seda enam taastada

Sinu võti näeb välja selline:

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

Vastendamine AWS volitustega

AWS parameeterVäärtusNäide
accessKeyIdSinu API-võtme esimesed 12 tähemärkibws_628bba35
secretAccessKeyTäielik API-võti (kõik 36 tähemärki)bws_628bba35e9e0079d9ff9c392b1b55a7b
regionAlati us-east-1us-east-1

WARNING

Täielikku API-võtit näidatakse ainult üks kord selle loomisel. Kui kaotad selle, kustuta võti ja loo uus API Keys lehelt.

Kiirstart

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 = Kaustad

S3 bucket'id vastavad sinu IPFS Ninja kaustadele. Kui laadid faili bucket'isse, salvestatakse see vastavasse kausta. Kui loetled bucket'i objekte, näed selle kausta faile.

S3 operatsioonIPFS Ninja vaste
CreateBucketUue kausta loomine
ListBucketsSinu kaustade loetlemine
DeleteBucketKausta ja kõigi selle failide kustutamine
PutObject bucket'isseFaili üleslaadimine kausta
ListObjectsV2 bucket'ilKausta failide loetlemine
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 kaudu loodud kaustad on samad kaustad, mis on nähtavad sinu Dashboard'is. Saad faile korraldada nii S3 API, REST API kui ka veebiliidese kaudu — kõik jagavad sama kaustasüsteemi.

INFO

Erinevalt Amazon S3-st on IPFS Ninja kaustad vaikimisi lamedad. Pesastatud struktuuride loomiseks kasuta REST API kausta endpoint'e parameetriga parentFolderId. S3 API kaudu kasuta võtmeprefikseid (nt images/photo.png) kausta siseseks korraldamiseks.

Toetatud operatsioonid

PutObject

Laadi fail IPFS-i üles. Fail kinnitatakse, turvaskannitakse ja CID tagastatakse päistes ETag ja 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

Laadi fail alla selle võtme (failinime) või CID järgi.

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

Hangi faili metaandmed ilma sisu allalaadimata.

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

Eemalda faili kinnitamine IPFS-ist ja kustuta see oma kontolt.

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

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

ListObjectsV2

Loetele bucket'i failid valikulise prefiksi filtreerimise ja lehekülgjaotusega.

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

Laadi üles suuri faile (kuni 5 GB) multipart upload'iga. AWS SDK teeb seda automaatselt:

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);

Või juhi osi käsitsi:

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 }]
  }
}));

Pythoni näide

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 näide

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!")
}

Erinevused Amazon S3-st

OmadusAmazon S3IPFS Ninja S3
SalvestusmudelMuudetavad objektidSisupõhine adresseerimine (muutumatud CID-d)
Ülekirjutamise käitumineAsendab objekti koha pealLoob uue CID, vana CID jääb kättesaadavaks
VersioonihaldusToetatudEi toetata (kasuta CID-e versioonimiseks)
Serveripoolne krüptimineToetatudEi toetata (sisu on IPFS-is)
Elutsükli reeglidToetatudEi toetata
Bucket'i reeglid / ACL-idToetatudKasuta gateway ligipääsureegleid
Eelallkirjastatud URL-idToetatudKasuta allkirjastatud üleslaadimise tokeneid
Maksimaalne objekti suurus5 TB5 GB (multipart), 100 MB (üksik PUT)
RegioonidMitu regiooniAinult us-east-1
ETag väärtusMD5 räsiIPFS CID
LisapäisedStandardne S3x-amz-meta-cid (IPFS CID)

Migreerimine Amazon S3-st

Asenda oma S3 kliendi konfiguratsioon:

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
 });

Sinu olemasolevad PutObject, GetObject, ListObjectsV2 ja DeleteObject kutsed töötavad muutmata kujul edasi.

Migreerimine Filebase'ist

Asenda 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
 });