Svenska
Svenska
Appearance
Svenska
Svenska
Appearance
Använd AWS SDK för att ladda upp, ladda ner och hantera filer på IPFS Ninja med samma kod som du använder för Amazon S3.
https://s3.ipfs.ninjaS3 API använder din IPFS Ninja API-nyckel för autentisering. Din API-nyckel fungerar som både åtkomstnyckel (access key) och hemlig nyckel (secret key).
Din nyckel ser ut så här:
bws_628bba35e9e0079d9ff9c392b1b55a7b
├──────────┘└──────────────────────────┘
prefix (12 chars) rest of key| AWS-parameter | Värde | Exempel |
|---|---|---|
accessKeyId | De första 12 tecknen i din API-nyckel | bws_628bba35 |
secretAccessKey | Den fullständiga API-nyckeln (alla 36 tecken) | bws_628bba35e9e0079d9ff9c392b1b55a7b |
region | Alltid us-east-1 | us-east-1 |
WARNING
Den fullständiga API-nyckeln visas bara en gång när du skapar den. Om du tappar bort den, radera nyckeln och skapa en ny på sidan för API-nycklar.
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 mappas till dina mappar i IPFS Ninja. När du laddar upp en fil till en bucket lagras den i motsvarande mapp. När du listar objekt i en bucket ser du filerna i den mappen.
| S3-operation | IPFS Ninja-motsvarighet |
|---|---|
CreateBucket | Skapa en ny mapp |
ListBuckets | Lista dina mappar |
DeleteBucket | Radera en mapp och alla filer i den |
PutObject till bucket | Ladda upp fil till mappen |
ListObjectsV2 på bucket | Lista filer i mappen |
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
Mappar som skapas via S3 API är samma mappar som syns på din instrumentpanel. Du kan organisera filer från S3 API, REST API eller webbgränssnittet — alla delar samma mappsystem.
INFO
Till skillnad från Amazon S3 är IPFS Ninja-mappar platta som standard. För att skapa kapslade strukturer, använd REST API:s mapp-endpoints med parentFolderId. Från S3 API, använd nyckelprefix (t.ex. images/photo.png) för att organisera inom en mapp.
Ladda upp en fil till IPFS. Filen pinnas, säkerhetsskannas och CID returneras i ETag- och x-amz-meta-cid-headers.
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"Ladda ner en fil med dess nyckel (filnamn) eller 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);Hämta filens metadata utan att ladda ner innehållet.
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);Avpinna en fil från IPFS och radera den från ditt konto.
import { DeleteObjectCommand } from "@aws-sdk/client-s3";
await s3.send(new DeleteObjectCommand({
Bucket: "my-project",
Key: "photo.png"
}));Lista filer i en bucket med valfri prefixfiltrering och paginering.
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
}Ladda upp stora filer (upp till 5 GB) med flerdelad uppladdning. AWS SDK hanterar detta automatiskt:
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);Eller kontrollera delarna manuellt:
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!")
}| Funktion | Amazon S3 | IPFS Ninja S3 |
|---|---|---|
| Lagringsmodell | Muterbara objekt | Innehållsadresserade (oföränderliga CID:er) |
| Överskrivningsbeteende | Ersätter objektet på plats | Skapar nytt CID, gammalt CID fortfarande åtkomligt |
| Versionering | Stöds | Stöds ej (använd CID:er för versionering) |
| Kryptering på serversidan | Stöds | Stöds ej (innehållet finns på IPFS) |
| Livscykelpolicyer | Stöds | Stöds ej |
| Bucket-policyer / ACL:er | Stöds | Använd åtkomstlägen för gateway |
| Försignerade URL:er | Stöds | Använd signerade uppladdningstoken |
| Max objektstorlek | 5 TB | 5 GB (flerdelad), 100 MB (enskild PUT) |
| Regioner | Flera regioner | Endast us-east-1 |
ETag-värde | MD5-hash | IPFS CID |
| Extra headers | Standard S3 | x-amz-meta-cid (IPFS CID) |
Byt ut din S3-klientkonfiguration:
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
});Dina befintliga anrop till PutObject, GetObject, ListObjectsV2 och DeleteObject fungerar utan ändringar.
Byt ut endpoint-URL:en:
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
});