· Nacho Coll · Tutorials  · 9 Min. Lesezeit

Dateien auf IPFS hochladen in 2026 — Vollständiger Leitfaden

Lernen Sie, wie Sie JSON, Bilder, PDFs und beliebige Dateien mit dem Dashboard, REST API, JavaScript oder Python auf IPFS hochladen. Schritt-für-Schritt-Anleitung mit Codebeispielen.

Lernen Sie, wie Sie JSON, Bilder, PDFs und beliebige Dateien mit dem Dashboard, REST API, JavaScript oder Python auf IPFS hochladen. Schritt-für-Schritt-Anleitung mit Codebeispielen.

Dateien auf IPFS hochladen in 2026 — Vollständiger Leitfaden

Wenn Sie jemals eine Datei so speichern wollten, dass kein einzelnes Unternehmen sie kontrolliert, jeder sie überprüfen kann und sie Zensur widersteht, ist das InterPlanetary File System (IPFS) die Antwort. Dieser Leitfaden führt Sie durch alle praktischen Möglichkeiten, Dateien auf IPFS hochzuladen — von einem einfachen Drag-and-Drop-Dashboard bis hin zu produktionsreifem Code in JavaScript und Python.

IPFS Ninja Upload-Seite mit Drag-and-Drop-Datei-Upload

Was ist IPFS und warum sollten Sie es verwenden?

IPFS ist ein Peer-to-Peer-Protokoll zum Speichern und Teilen von Dateien. Anstatt Inhalte danach zu adressieren, wo sie sich befinden (eine URL auf einem bestimmten Server), adressiert IPFS Inhalte danach, was sie sind. Jede Datei erhält einen eindeutigen Content Identifier (CID), der von einem kryptografischen Hash ihres Inhalts abgeleitet wird. Dieses Design gibt Ihnen drei Eigenschaften, die traditionelles Hosting nicht erreichen kann:

  • Inhaltsadressierung. Ein CID garantiert, dass die Daten, die Sie erhalten, genau die Daten sind, die hochgeladen wurden. Wenn sich ein einzelnes Byte ändert, ändert sich der CID. Niemand kann Ihre Datei manipulieren, ohne ihre Adresse zu invalidieren.
  • Permanenz. Solange mindestens ein Knoten im Netzwerk Ihre Datei pinnt, bleibt sie verfügbar. Pinning-Dienste wie IPFS Ninja stellen sicher, dass Ihre Dateien online bleiben, ohne dass Sie Ihre eigene Infrastruktur betreiben müssen. Um zu verstehen, warum Pinning wichtig ist und wie die Garbage Collection funktioniert, siehe Was ist IPFS Pinning?.
  • Zensurresistenz. Dateien auf IPFS sind nicht an eine einzelne Domain oder einen einzelnen Server gebunden. Es gibt keinen einzigen Ausfallpunkt, den eine Regierung oder ein Unternehmen abschalten könnte.

Übliche Anwendungsfälle sind NFT-Metadaten und -Medien, Assets dezentraler Anwendungen, wissenschaftliche Datensätze, öffentliche Aufzeichnungen und jedes Szenario, bei dem die Datenintegrität wichtig ist.

Voraussetzungen

Bevor Sie etwas hochladen, benötigen Sie zwei Dinge:

  1. Ein IPFS Ninja-Konto. Registrieren Sie sich kostenlos unter https://ipfs.ninja/signup. Der kostenlose Plan bietet Ihnen 500 Dateien und 1 GB Speicher — mehr als genug, um loszulegen.

  2. Einen API-Schlüssel. Gehen Sie nach der Anmeldung in den API-Keys-Bereich Ihres Dashboards und generieren Sie einen neuen Schlüssel. Er sieht etwa so aus: bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 (das Präfix bws_a1b2c3d4 wird im Dashboard zur Identifikation angezeigt). Halten Sie diesen Schlüssel geheim. Sie übergeben ihn bei jeder API-Anfrage im X-Api-Key-Header.

Wenn Sie nur das Web-Dashboard nutzen wollen, können Sie den Schritt mit dem API-Schlüssel überspringen, aber ein Schlüssel ermöglicht programmatische Uploads aus Ihren eigenen Anwendungen.

Methode 1: Web-Dashboard (Drag-and-Drop)

Der schnellste Weg, eine Datei hochzuladen, ist über das IPFS Ninja-Dashboard.

  1. Navigieren Sie zu https://ipfs.ninja/upload und melden Sie sich an.
  2. Ziehen Sie eine beliebige Datei — JSON, PNG, JPEG, PDF, SVG oder einen anderen Typ — auf den Upload-Bereich, oder klicken Sie, um Ihr Dateisystem zu durchsuchen.
  3. Fügen Sie optional eine Beschreibung und Metadaten (Schlüssel-Wert-Paare) hinzu, um Ihre Dateien später zu organisieren.
  4. Klicken Sie auf Upload. Innerhalb von Sekunden wird Ihre Datei auf IPFS gepinnt und Sie erhalten einen CID und eine Gateway-URL.

Diese Methode unterstützt jeden Dateityp und erfordert keinen Code. Sie ist ideal für einmalige Uploads, schnelle Tests oder nicht-technische Teammitglieder, die Inhalte pinnen müssen.

Methode 2: REST API mit curl

Für Automatisierung und Skripting ist die REST API der direkteste Ansatz. Der Endpoint ist:

POST https://api.ipfs.ninja/upload/new

Jede Anfrage benötigt den X-Api-Key-Header und einen JSON-Body mit einem content-Feld.

JSON hochladen

Um ein JSON-Objekt hochzuladen, übergeben Sie es direkt als Wert von content:

curl -X POST https://api.ipfs.ninja/upload/new \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -d '{
    "content": {
      "name": "Astro Cat #42",
      "description": "A fearless cat exploring the cosmos.",
      "image": "ipfs://bafkreigh2akiscaildc7lqnpfuh3sksq4ogrtz7tpk2aulid5fhqotmqm",
      "attributes": [
        { "trait_type": "Background", "value": "Nebula" },
        { "trait_type": "Helmet", "value": "Gold" }
      ]
    },
    "description": "NFT metadata for Astro Cat #42",
    "metadata": { "collection": "astro-cats", "tokenId": "42" }
  }'

Die Felder description und metadata sind optional. Sie werden zusammen mit Ihrer Datei im IPFS Ninja-Dashboard und in den API-Antworten gespeichert, um Ihnen das spätere Identifizieren und Filtern von Uploads zu erleichtern. Sie sind nicht im Inhalt enthalten, der auf IPFS gepinnt wird.

Ein Bild (Binärdatei) hochladen

Bei Binärdateien wie Bildern oder PDFs kodieren Sie die Datei in base64 und übergeben den kodierten String als content:

curl -X POST https://api.ipfs.ninja/upload/new \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -d "{
    \"content\": \"$(base64 -w 0 photo.png)\",
    \"description\": \"Product photo for landing page\",
    \"metadata\": { \"project\": \"website-redesign\" }
  }"

Die API erkennt den Inhaltstyp automatisch. Es ist nicht nötig anzugeben, ob Sie JSON, ein Bild oder ein PDF hochladen — der Dienst kümmert sich darum.

Methode 3: JavaScript / Node.js

Mit der eingebauten fetch-API (Node.js 18+ oder einem beliebigen modernen Browser) benötigt das Hochladen auf IPFS nur wenige Zeilen.

JSON hochladen

const API_KEY = "bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6";

const metadata = {
  name: "Astro Cat #42",
  description: "A fearless cat exploring the cosmos.",
  image: "ipfs://bafkreigh2akiscaildc7lqnpfuh3sksq4ogrtz7tpk2aulid5fhqotmqm",
  attributes: [
    { trait_type: "Background", value: "Nebula" },
    { trait_type: "Helmet", value: "Gold" },
  ],
};

const response = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": API_KEY,
  },
  body: JSON.stringify({
    content: metadata,
    description: "NFT metadata for Astro Cat #42",
  }),
});

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

Eine Binärdatei hochladen

import { readFileSync } from "node:fs";

const API_KEY = "bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6";
const fileBuffer = readFileSync("photo.png");
const base64Content = fileBuffer.toString("base64");

const response = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": API_KEY,
  },
  body: JSON.stringify({
    content: base64Content,
    description: "Product photo",
    metadata: { project: "website-redesign" },
  }),
});

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

Batch-Upload mit Fehlerbehandlung

In der Produktion müssen Sie oft viele Dateien hochladen. Hier ist ein wiederverwendbarer Helper mit Retries:

import { readFileSync } from "node:fs";

const API_KEY = "bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6";
const API_URL = "https://api.ipfs.ninja/upload/new";

async function uploadToIPFS(content, options = {}) {
  const body = { content };
  if (options.description) body.description = options.description;
  if (options.metadata) body.metadata = options.metadata;

  const response = await fetch(API_URL, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-Api-Key": API_KEY,
    },
    body: JSON.stringify(body),
  });

  if (!response.ok) {
    const error = await response.text();
    throw new Error(`Upload failed (${response.status}): ${error}`);
  }

  return response.json();
}

// Upload JSON
const jsonResult = await uploadToIPFS(
  { name: "My Data", values: [1, 2, 3] },
  { description: "Sample dataset" }
);

// Upload image
const imageBase64 = readFileSync("banner.jpg").toString("base64");
const imageResult = await uploadToIPFS(imageBase64, {
  description: "Banner image",
  metadata: { format: "jpg", width: "1200" },
});

console.log("JSON CID:", jsonResult.cid);
console.log("Image CID:", imageResult.cid);

Methode 4: Python

Die requests-Bibliothek von Python macht IPFS-Uploads unkompliziert.

JSON hochladen

import requests

API_KEY = "bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
API_URL = "https://api.ipfs.ninja/upload/new"

headers = {
    "Content-Type": "application/json",
    "X-Api-Key": API_KEY,
}

payload = {
    "content": {
        "name": "Astro Cat #42",
        "description": "A fearless cat exploring the cosmos.",
        "image": "ipfs://bafkreigh2akiscaildc7lqnpfuh3sksq4ogrtz7tpk2aulid5fhqotmqm",
        "attributes": [
            {"trait_type": "Background", "value": "Nebula"},
            {"trait_type": "Helmet", "value": "Gold"},
        ],
    },
    "description": "NFT metadata for Astro Cat #42",
    "metadata": {"collection": "astro-cats", "tokenId": "42"},
}

response = requests.post(API_URL, json=payload, headers=headers)
result = response.json()

print(f"CID: {result['cid']}")
print(f"Gateway URL: {result['uris']['url']}")

Eine Binärdatei hochladen

import base64
import requests

API_KEY = "bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
API_URL = "https://api.ipfs.ninja/upload/new"

headers = {
    "Content-Type": "application/json",
    "X-Api-Key": API_KEY,
}

with open("photo.png", "rb") as f:
    encoded = base64.b64encode(f.read()).decode("utf-8")

payload = {
    "content": encoded,
    "description": "Product photo",
    "metadata": {"project": "website-redesign"},
}

response = requests.post(API_URL, json=payload, headers=headers)
result = response.json()

print(f"CID: {result['cid']}")
print(f"Size: {result['sizeMB']} MB")
print(f"IPFS URI: {result['uris']['ipfs']}")
print(f"Gateway URL: {result['uris']['url']}")

Batch-Upload

import base64
from pathlib import Path
import requests

API_KEY = "bws_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
API_URL = "https://api.ipfs.ninja/upload/new"
HEADERS = {"Content-Type": "application/json", "X-Api-Key": API_KEY}


def upload_file(file_path, description=None, metadata=None):
    with open(file_path, "rb") as f:
        encoded = base64.b64encode(f.read()).decode("utf-8")

    payload = {"content": encoded}
    if description:
        payload["description"] = description
    if metadata:
        payload["metadata"] = metadata

    response = requests.post(API_URL, json=payload, headers=HEADERS)
    response.raise_for_status()
    return response.json()


# Upload all PNGs in a directory
for png in Path("./images").glob("*.png"):
    result = upload_file(png, description=f"Image: {png.name}")
    print(f"{png.name} -> {result['cid']}")

Die Antwort verstehen

Jeder erfolgreiche Upload gibt ein JSON-Objekt mit den folgenden Feldern zurück:

{
  "cid": "bafkreigh2akiscaildc7lqnpfuh3sksq4ogrtz7tpk2aulid5fhqotmqm",
  "sizeMB": 0.024,
  "uris": {
    "ipfs": "ipfs://bafkreigh2akiscaildc7lqnpfuh3sksq4ogrtz7tpk2aulid5fhqotmqm",
    "url": "https://ipfs.ninja/ipfs/bafkreigh2akiscaildc7lqnpfuh3sksq4ogrtz7tpk2aulid5fhqotmqm"
  }
}
FeldBeschreibung
cidDer Content Identifier — ein eindeutiger Hash des Inhalts Ihrer Datei. Dies ist die permanente Adresse Ihrer Datei auf IPFS.
sizeMBDie Größe der hochgeladenen Datei in Megabyte.
uris.ipfsDer IPFS-native URI (ipfs://CID). Verwenden Sie dies beim Verweisen auf Dateien aus Smart Contracts, NFT-Metadaten oder anderen IPFS-fähigen Anwendungen.
uris.urlEine direkte HTTPS-Gateway-URL, die Sie in jedem Browser öffnen können. Ideal zum Teilen, Einbetten in Webseiten oder zur schnellen Überprüfung.

Auf Ihre Dateien zugreifen

Sobald eine Datei gepinnt ist, gibt es zwei Hauptmöglichkeiten, sie abzurufen.

Dediziertes Gateway

Jedes IPFS Ninja-Konto enthält ein dediziertes Gateway mit einem benutzerdefinierten Slug:

https://your-slug.gw.ipfs.ninja/ipfs/{CID}

Dedizierte Gateways sind schneller und zuverlässiger als öffentliche Gateways, da sie sich direkt mit der IPFS Ninja-Pinning-Infrastruktur verbinden. Sie können über Ihr dediziertes Gateway mit dem CID aus der Upload-Antwort auf Ihre Dateien zugreifen.

Öffentliche IPFS-Gateways

Jedes IPFS-Gateway kann Ihren Inhalt mit dem CID bedienen:

https://ipfs.ninja/ipfs/{CID}     ← Ihr dediziertes Gateway
https://dweb.link/ipfs/{CID}       ← öffentliches Gateway
https://w3s.link/ipfs/{CID}        ← öffentliches Gateway

Öffentliche Gateways sind nützlich, wenn Sie überprüfen wollen, dass Ihr Inhalt von außerhalb des IPFS Ninja-Netzwerks erreichbar ist. Bedenken Sie, dass sie im Vergleich zu Ihrem dedizierten Gateway möglicherweise langsamer oder ratebegrenzt sind.

Aus Smart Contracts und dApps

Wenn Sie Referenzen on-chain speichern (zum Beispiel in einer ERC-721 Token-URI), verwenden Sie den ipfs://-URI:

ipfs://bafkreigh2akiscaildc7lqnpfuh3sksq4ogrtz7tpk2aulid5fhqotmqm

Wallets, Marketplaces und andere IPFS-fähige Anwendungen wissen, wie sie diesen URI über ein beliebiges verfügbares Gateway auflösen.

Best Practices

Halten Sie einzelne Dateien unter 100 MB. Während die API auch größere Uploads akzeptiert, werden kleinere Dateien schneller gepinnt und replizieren effizienter über das IPFS-Netzwerk. Wenn Sie mit großen Datensätzen arbeiten, teilen Sie diese in kleinere Chunks auf.

Verwenden Sie beschreibende Metadaten. Die Felder description und metadata kosten nichts und machen es viel einfacher, Ihre Uploads später zu verwalten. Geben Sie Projektnamen, Versionsnummern oder beliebige Bezeichner an, die Ihnen beim Suchen und Filtern helfen.

Speichern Sie CIDs in Ihrer eigenen Datenbank. Auch wenn IPFS Ninja Ihren Upload-Verlauf speichert, macht die Pflege Ihres eigenen Mappings von CIDs zu Anwendungsbezeichnern (User-IDs, Bestellnummern, Token-IDs) Ihre Integration widerstandsfähiger.

Verwenden Sie den IPFS-URI für On-Chain-Referenzen. Speichern Sie in Smart Contracts oder unveränderlichen Datensätzen immer ipfs://CID statt einer HTTPS-Gateway-URL. Gateway-URLs können sich ändern; CIDs nicht.

Bevorzugen Sie JSON-Inhalt für strukturierte Daten. Wenn Ihre Daten strukturiert sind (Metadaten, Konfiguration, Datensätze), übergeben Sie sie als JSON-Objekt statt sie als String zu kodieren. Die API speichert sie effizienter und der resultierende IPFS-Inhalt ist menschenlesbar.

Behandeln Sie Fehler elegant. Prüfen Sie HTTP-Statuscodes und implementieren Sie Retries mit exponentiellem Backoff für 5xx-Antworten. Die API gibt klare Fehlermeldungen für 4xx-Antworten zurück (ungültiger API-Schlüssel, fehlender Inhalt, unzureichende Credits), die Sie Ihren Nutzern anzeigen sollten.

Fazit

Dateien auf IPFS hochzuladen war noch nie einfacher. Egal, ob Sie ein visuelles Dashboard, einen schnellen curl-Befehl oder eine produktionstaugliche Integration in JavaScript oder Python bevorzugen, IPFS Ninja bietet Ihnen einen einzigen Endpoint und eine konsistente Erfahrung über alle Inhaltstypen hinweg.

Der kostenlose Dharma-Plan enthält 50 Dateien, 1 GB Speicher und 2 GB monatliche Bandbreite — genug, um Ihre Integration End-to-End zu bauen und zu testen. Wenn Sie bereit sind zu skalieren, bieten der Bodhi-Plan für 5 $/Monat, der Karma-Plan für 19 $/Monat und der Nirvana-Plan für 59 $/Monat höhere Limits, dedizierte Gateways und (bei Nirvana) Prioritätssupport.

Erstellen Sie Ihr kostenloses Konto und beginnen Sie in unter einer Minute, Dateien auf IPFS hochzuladen.

Für einen tieferen API-Walkthrough mit signierten Token und Client-seitigen Uploads siehe unser IPFS Upload API Tutorial. Für eine vollständige API-Referenz einschließlich Auflisten von Dateien, Verwalten von API-Schlüsseln und Konfigurieren von Gateways besuchen Sie die Dokumentation.

Zurück zum Blog

Verwandte Artikel

Alle Artikel anzeigen »