Skip to content

CAR Import (DAG Import)

CAR (Content Addressable aRchive) ফাইল ব্যবহার করে একটি মাত্র অনুরোধে সম্পূর্ণ IPFS DAG ইমপোর্ট করুন। আপনার CID হুবহু সংরক্ষিত থাকে — কোনো পুনরায় বিভাজন বা পুনরায় হ্যাশিং নেই।

CAR ফাইল কী?

CAR ফাইল একটি সম্পূর্ণ IPFS ডিরেক্টরি ট্রি বা DAG কে একটি একক বহনযোগ্য আর্কাইভে প্যাকেজ করে। প্রতিটি ব্লক তার আসল CID সহ সংরক্ষিত থাকে, তাই সার্ভিস সবকিছু যেমন আছে তেমনই ইমপোর্ট করে। এর মানে:

  • CID সংরক্ষণ — স্থানীয়ভাবে CID গণনা করুন, যাচাই করুন যে সার্ভিস ঠিক একই CID ফেরত দেয়
  • ব্যাচ আপলোড — একটি একটি করে না করে একটি মাত্র অনুরোধে শত শত ফাইল আপলোড করুন
  • প্রোভাইডার মাইগ্রেশন — অন্য প্রোভাইডার থেকে DAG এক্সপোর্ট করুন, অভিন্ন CID সহ IPFS Ninja-তে ইমপোর্ট করুন
  • কাস্টম DAG — যেকোনো IPLD ডেটা স্ট্রাকচার সরাসরি আপলোড করুন

REST API

POST /upload/new

সাধারণ আপলোডের মতো একই endpoint — CAR ইমপোর্ট নির্দেশ করতে car: true যোগ করুন।

অনুরোধের বডি

প্যারামিটারটাইপআবশ্যকবিবরণ
contentstringহ্যাঁBase64-এনকোডেড CAR ফাইল
carbooleanহ্যাঁCAR ইমপোর্ট সক্রিয় করতে true সেট করুন
descriptionstringনাইমপোর্টের সংক্ষিপ্ত বিবরণ
folderIdstringনাইমপোর্ট করা কন্টেন্ট সাজানোর জন্য ফোল্ডার ID
metadataobjectনাকাস্টম কী-ভ্যালু জোড়া (সাধারণ আপলোডের মতো একই নিয়ম)

উদাহরণ: curl দিয়ে CAR ফাইল ইমপোর্ট

ধাপ ১: ipfs-car ব্যবহার করে একটি স্থানীয় ডিরেক্টরি থেকে CAR ফাইল তৈরি করুন:

bash
npx ipfs-car pack ./my-directory -o my-archive.car

ধাপ ২: CAR ফাইলটি আপলোড করুন:

bash
curl -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d "{
    \"content\": \"$(base64 -w0 my-archive.car)\",
    \"car\": true,
    \"description\": \"My directory import\"
  }"

উদাহরণ: JavaScript দিয়ে CAR ফাইল ইমপোর্ট

javascript
import fs from "fs";

const carBuffer = fs.readFileSync("my-archive.car");
const base64Content = carBuffer.toString("base64");

const response = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: {
    "X-Api-Key": "bws_your_api_key_here",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    content: base64Content,
    car: true,
    description: "My directory import"
  })
});

const result = await response.json();
console.log("Root CID:", result.cid);
console.log("Gateway:", result.uris.url);

উদাহরণ: Python দিয়ে CAR ফাইল ইমপোর্ট

python
import requests
import base64

with open("my-archive.car", "rb") as f:
    car_content = base64.b64encode(f.read()).decode()

response = requests.post(
    "https://api.ipfs.ninja/upload/new",
    headers={
        "X-Api-Key": "bws_your_api_key_here",
        "Content-Type": "application/json"
    },
    json={
        "content": car_content,
        "car": True,
        "description": "My directory import"
    }
)

result = response.json()
print("Root CID:", result["cid"])
print("Gateway:", result["uris"]["url"])

রেসপন্স 200 OK

json
{
  "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
  "sizeMB": 4.2,
  "car": true,
  "uris": {
    "ipfs": "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
    "url": "https://ipfs.ninja/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"
  }
}

S3-সামঞ্জস্যপূর্ণ API

S3 API এর মাধ্যমে CAR ফাইল ইমপোর্ট করতে PutObject অনুরোধে x-amz-meta-import: car হেডার ব্যবহার করুন।

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

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

const result = await s3.send(new PutObjectCommand({
  Bucket: "my-project",
  Key: "my-archive.car",
  Body: fs.readFileSync("my-archive.car"),
  ContentType: "application/vnd.ipld.car",
  Metadata: { import: "car" }   // ← CAR ইমপোর্ট ট্রিগার করে
}));

console.log("Root CID:", result.ETag);

MCP Server

ipfs_import_car টুলটি MCP Server (v1.3.0+)-এ উপলব্ধ:

You: Import my-archive.car to IPFS
Claude: [calls ipfs_import_car with base64 content]
     → Root CID: bafybeig... — https://ipfs.ninja/ipfs/bafybeig...

CAR ফাইল তৈরি করা

ডিরেক্টরি থেকে (প্রস্তাবিত)

ipfs-car CLI টুল ব্যবহার করুন:

bash
# ইনস্টল করুন
npm install -g ipfs-car

# একটি ডিরেক্টরি CAR ফাইলে প্যাক করুন
ipfs-car pack ./my-directory -o my-archive.car

# আপলোডের আগে রুট CID পরীক্ষা করুন
ipfs-car roots my-archive.car
# bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

চলমান IPFS নোড থেকে

Kubo CLI ব্যবহার করে যেকোনো CID কে CAR ফাইল হিসেবে এক্সপোর্ট করুন:

bash
ipfs dag export QmXyz... > my-archive.car

JavaScript দিয়ে প্রোগ্রাম্যাটিক্যালি

@ipld/car লাইব্রেরি ব্যবহার করুন:

javascript
import { CarWriter } from "@ipld/car";
import { CID } from "multiformats/cid";
import * as raw from "multiformats/codecs/raw";
import { sha256 } from "multiformats/hashes/sha2";

// ব্লক তৈরি করুন
const block1 = new TextEncoder().encode("Hello, IPFS!");
const hash1 = await sha256.digest(block1);
const cid1 = CID.create(1, raw.code, hash1);

// CAR লিখুন
const { writer, out } = CarWriter.create([cid1]);
writer.put({ cid: cid1, bytes: block1 });
writer.close();

// আউটপুট সংগ্রহ করুন
const chunks = [];
for await (const chunk of out) chunks.push(chunk);
const carBuffer = Buffer.concat(chunks);

CID অখণ্ডতা যাচাই

CAR ইমপোর্টের মূল সুবিধা হলো CID সংরক্ষণ। আপলোডের আগে এবং পরে রুট CID মিলেছে কিনা তা যাচাই করতে পারেন:

bash
# 1. ডিরেক্টরি প্যাক করুন এবং রুট CID নোট করুন
ipfs-car pack ./my-nft-collection -o collection.car
ipfs-car roots collection.car
# bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

# 2. IPFS Ninja-তে আপলোড করুন
curl -s -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"content\": \"$(base64 -w0 collection.car)\", \"car\": true}" \
  | jq .cid
# "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"
# ✓ CID মিলেছে — কন্টেন্ট স্থানীয়ভাবে তৈরির মতোই হুবহু ইমপোর্ট হয়েছে

অন্য প্রোভাইডার থেকে মাইগ্রেশন

Pinata থেকে

bash
# IPFS gateway ব্যবহার করে Pinata থেকে এক্সপোর্ট করুন
ipfs dag export QmYourCID > export.car

# IPFS Ninja-তে ইমপোর্ট করুন
curl -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"content\": \"$(base64 -w0 export.car)\", \"car\": true}"

Filebase থেকে

bash
# Filebase তাদের S3 API এর মাধ্যমে CAR এক্সপোর্ট সমর্থন করে
aws s3 cp s3://your-bucket/your-file.car export.car \
  --endpoint-url https://s3.filebase.com

# IPFS Ninja-তে ইমপোর্ট করুন
curl -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"content\": \"$(base64 -w0 export.car)\", \"car\": true}"

সীমাবদ্ধতা

সীমামান
সর্বোচ্চ CAR ফাইলের আকার100 MB
সর্বনিম্ন রুটঅন্তত একটি রুট CID থাকতে হবে
CAR ফরম্যাটCARv1 (সর্বজনীনভাবে সমর্থিত)
উপলব্ধতাসব প্ল্যান (Dharma, Bodhi, Nirvana)

আপনার প্ল্যানের স্টোরেজ এবং ফাইল সংখ্যার সীমা প্রযোজ্য। ইমপোর্ট করা DAG একটি ফাইল এন্ট্রি হিসেবে গণনা হয় এবং CAR ফাইলের আকার আপনার স্টোরেজ কোটা থেকে কাটা হয়।

সমস্যা সমাধান

"invalid CAR file: too small"

আপলোড করা কন্টেন্ট ৪০ বাইটের কম, যা একটি বৈধ CAR ফাইলের জন্য খুবই ছোট। নিশ্চিত করুন যে আপনি সম্পূর্ণ base64-এনকোডেড CAR কন্টেন্ট পাঠাচ্ছেন।

"File too large. Maximum upload size is 100 MB."

ডিকোড করা CAR ফাইল 100 MB অতিক্রম করেছে। carbites প্যাকেজ ব্যবহার করে আপনার কন্টেন্ট একাধিক ছোট CAR ফাইলে বিভক্ত করুন, অথবা ফাইলগুলো আলাদাভাবে আপলোড করুন।

"dag/import did not return a root CID"

IPFS নোড CAR ফাইলটি প্রক্রিয়া করতে পারেনি। ফাইলটি একটি বৈধ CARv1 আর্কাইভ কিনা যাচাই করুন:

bash
ipfs-car roots my-archive.car

এই কমান্ড ব্যর্থ হলে, CAR ফাইলটি ত্রুটিপূর্ণ। ipfs-car pack বা ipfs dag export দিয়ে পুনরায় তৈরি করুন।

"not enough storage"

আপনার প্ল্যানের স্টোরেজ সীমা পূর্ণ হয়েছে। অব্যবহৃত ফাইল মুছুন অথবা ipfs.ninja/pricing-এ আপনার প্ল্যান আপগ্রেড করুন।