Skip to content

CAR Import (DAG Import)

Importeu DAG sencers d'IPFS en una sola sol·licitud utilitzant fitxers CAR (Content Addressable aRchive). Els vostres CID es preserven exactament — sense re-fragmentació ni re-hashing.

Què és un fitxer CAR?

Un fitxer CAR empaqueta un arbre de directoris IPFS complet o un DAG en un sol arxiu portable. Cada bloc s'emmagatzema amb el seu CID original, de manera que el servei ho importa tot tal com és. Això significa:

  • Preservació de CID — calculeu els CID localment, verifiqueu que el servei retorna exactament el mateix CID
  • Càrrega per lots — carregueu centenars de fitxers en una sola sol·licitud en lloc d'un per un
  • Migració de proveïdor — exporteu un DAG d'un altre proveïdor, importeu-lo a IPFS Ninja amb CID idèntics
  • DAG personalitzats — carregueu qualsevol estructura de dades IPLD directament

REST API

POST /upload/new

El mateix endpoint que les càrregues normals — afegiu car: true per indicar una importació CAR.

Cos de la sol·licitud

ParàmetreTipusObligatoriDescripció
contentstringFitxer CAR codificat en Base64
carbooleanEstabliu a true per activar la importació CAR
descriptionstringNoBreu descripció de la importació
folderIdstringNoID de carpeta per organitzar el contingut importat
metadataobjectNoParells clau-valor personalitzats (mateixes regles que les càrregues normals)

Exemple: Importar un fitxer CAR amb curl

Pas 1: Creeu un fitxer CAR a partir d'un directori local amb ipfs-car:

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

Pas 2: Carregueu el fitxer 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\"
  }"

Exemple: Importar un fitxer CAR amb JavaScript

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

Exemple: Importar un fitxer CAR amb Python

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"])

Resposta 200 OK

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

API compatible amb S3

Utilitzeu la capçalera x-amz-meta-import: car en una sol·licitud PutObject per importar un fitxer CAR a través de l'API S3.

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" }   // ← activa la importació CAR
}));

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

MCP Server

L'eina ipfs_import_car està disponible al 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...

Creació de fitxers CAR

Des d'un directori (recomanat)

Utilitzeu l'eina CLI ipfs-car:

bash
# Instal·lació
npm install -g ipfs-car

# Empaquetar un directori en un fitxer CAR
ipfs-car pack ./my-directory -o my-archive.car

# Comprovar el CID arrel abans de carregar
ipfs-car roots my-archive.car
# bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

Des d'un node IPFS en execució

Exporteu qualsevol CID com a fitxer CAR amb el CLI de Kubo:

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

Programàticament amb JavaScript

Utilitzeu la biblioteca @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";

// Crear blocs
const block1 = new TextEncoder().encode("Hello, IPFS!");
const hash1 = await sha256.digest(block1);
const cid1 = CID.create(1, raw.code, hash1);

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

// Recollir la sortida
const chunks = [];
for await (const chunk of out) chunks.push(chunk);
const carBuffer = Buffer.concat(chunks);

Verificació de la integritat del CID

L'avantatge principal de la importació CAR és la preservació del CID. Podeu verificar que el CID arrel coincideix abans i després de la càrrega:

bash
# 1. Empaqueteu el directori i anoteu el CID arrel
ipfs-car pack ./my-nft-collection -o collection.car
ipfs-car roots collection.car
# bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

# 2. Carregueu a 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"
# ✓ Els CID coincideixen — el contingut s'ha importat exactament com es va crear localment

Migració des d'un altre proveïdor

Des de Pinata

bash
# Exportar des de Pinata mitjançant el gateway IPFS
ipfs dag export QmYourCID > export.car

# Importar a 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}"

Des de Filebase

bash
# Filebase admet l'exportació CAR mitjançant la seva API S3
aws s3 cp s3://your-bucket/your-file.car export.car \
  --endpoint-url https://s3.filebase.com

# Importar a 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}"

Límits

LímitValor
Mida màxima del fitxer CAR100 MB
Mínim d'arrelsAlmenys un CID arrel
Format CARCARv1 (universalment compatible)
DisponibilitatTots els plans (Dharma, Bodhi, Nirvana)

S'apliquen els límits d'emmagatzematge i de nombre de fitxers del vostre pla. El DAG importat compta com una entrada de fitxer, i la mida del fitxer CAR es dedueix de la vostra quota d'emmagatzematge.

Resolució de problemes

"invalid CAR file: too small"

El contingut carregat és inferior a 40 bytes, massa petit per ser un fitxer CAR vàlid. Assegureu-vos que envieu el contingut CAR complet codificat en base64.

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

El fitxer CAR descodificat supera els 100 MB. Dividiu el vostre contingut en diversos fitxers CAR més petits amb el paquet carbites, o carregueu els fitxers individualment.

"dag/import did not return a root CID"

El node IPFS no ha pogut processar el fitxer CAR. Verifiqueu que el fitxer és un arxiu CARv1 vàlid:

bash
ipfs-car roots my-archive.car

Si aquesta comanda falla, el fitxer CAR està malmès. Regenereu-lo amb ipfs-car pack o ipfs dag export.

"not enough storage"

S'ha assolit el límit d'emmagatzematge del vostre pla. Elimineu fitxers no utilitzats o actualitzeu el vostre pla a ipfs.ninja/pricing.