IPFS APIでデータアップロード

2024年4月14日

概要

IPFSノードを立ち上げデータをアップロードする方法の紹介です。

IPFSノードにデータ(ファイルや画像など)を保存

/api/v0/add

    IPFSにファイルやディレクトリを追加する。

    引数

    パラメータ説明必須
    quiet [bool]:最小限の出力を書き込む。×
    quieter [bool]最終ハッシュのみを出力する。×
    silent [bool]何も出力しない。×
    progress [bool]進捗データを流す×
    trickle [bool]ダグ生成にトリクルダグ形式を使用する×
    only-hash [bool]チャンクとハッシュのみ - ディスクに書き込まない×
    wrap-with-directory [bool]ファイルをディレクトリオブジェクトでラップする×
    chunker [string]チャンキングアルゴリズム、size-[bytes]、ravin-[min]-[avg]-[max]、またはbuzhash。デフォルト:size-262144×
    raw-leaves [bool]リーフノードにrawブロックを使う。×
    nocopy [bool]ファイルストアを使ってファイルを追加する。raw-leavesを暗示する。(実験的)×
    fscache [bool]ファイルストアに既存のブロックがないかチェックする。(実験的)×
    cid-version [int]CIDバージョン。CIDv1に依存するオプションが渡されない限り、デフォルトは0である。バージョン1を渡すと、raw-leavesオプションのデフォルトがtrueになる×
    hash [string]使用するハッシュ関数。sha2-256でない場合はCIDv1を意味する。(実験的)。デフォルト: sha2-256×
    inline [bool]小さなブロックを CID にインライン化する。(実験的)×
    inline-limit [int]インライン化する最大ブロックサイズ。(実験的)。デフォルト: 32。×
    pin [bool]追加されたファイルをガベージコレクションから保護するためにローカルにピンを立てる。デフォルト: true×
    to-files [string]指定したパスに Files API (MFS) への参照を追加します×

    Request Body

    引数のパスはファイル・タイプです。このエンドポイントは、'multipart/form-data'としてリクエストのボディに1つまたは複数のファイル(コマンドに依存)を期待します。

    addコマンドはファイルを追加するだけでなく、ディレクトリや複雑な階層をアップロードすることもできます。

    これは次のように行われる: マルチパートリクエストの各部分は、IPFSに追加するディレクトリまたはファイルです。

    ディレクトリパートは特別なコンテントタイプapplication/x-directoryを持つ。これらのパートはデータを持たない。パートヘッダーは以下のようになる:

    Content-Disposition: form-data; name="file"; filename="folderName"
    Content-Type: application/x-directory

    ファイル・パートは、以下のヘッダーの後にファイル・ペイロードを運ぶ:

    Abspath: /absolute/path/to/file.txt
    Content-Disposition: form-data; name="file"; filename="folderName%2Ffile.txt"
    Content-Type: application/octet-stream
    
    ...contents...

    上記のファイルは "folderName/file.txt "階層にパスを含むので、IPFSはそれを "folderName "の中に追加することができる。ディレクトリを宣言する部分は、中にファイルがある場合は任意であり、ファイル名から推測される。どのような場合でも、ディレクトリツリーの深さ優先探索は、 リクエストを生成する異なるパーツを順番に並べるために推奨される。

    Abspathヘッダーはnocopyオプションで有効になっているfilestore/urlstore機能のために含まれ、ファイルシステム内のファイルの場所(IPFSルート内)、または完全なWeb URLに設定することができます。

    Response

    成功すると、このエンドポイントへの呼び出しは、200と次のボディで返されます:

    {
      "Bytes": "<int64>",
      "Hash": "<string>",
      "Name": "<string>",
      "Size": "<string>"
    }
    

    cURL Example

    curl -X POST -F file=@myfile "http://127.0.0.1:5001/api/v0/add?quiet=<value>&quieter=<value>&silent=<value>&progress=<value>&trickle=<value>&only-hash=<value>&wrap-with-directory=<value>&chunker=size-262144&raw-leaves=<value>&nocopy=<value>&fscache=<value>&cid-version=<value>&hash=sha2-256&inline=<value>&inline-limit=32&pin=true&to-files=<value>"

    データを公開

    /api/v0/name/publish

    IPNS名を公開する。

    引数

    パラメータ説明必須
    arg [string]公開するオブジェクトのipfsパス
    key [string]ipfs key list -l'でリストされる、使用するキーの名前または有効なPeerID。デフォルト: self×
    resolve [bool]パブリッシュする前に、与えられたパスが解決できるかどうかをチェックする。デフォルト: true×
    lifetime [string]署名付きレコードの有効期間。300s"、"1.5h"、または "7d2h45m "のような期間を受け入れる。デフォルト:48h0m0s×
    ttl [string]更新をチェックする前にこのレコードをキャッシュする時間を示す。デフォルト:1h0m0s×
    quieter [bool]CIDv1としてエンコードされた最終IPNS名のみを書き込む(/ipnsコンテンツパスで使用するため)。×
    v1compat [bool]V1 と V2 署名の両方のフィールドを含む下位互換 IPNS レコードを生成する。デフォルト:true×
    allow-offline [bool]offlineの場合、IPNSレコードをネットワークにブロードキャストせずに(失敗する代わりに)ローカルのデータストアに保存する×
    ipns-base [string]キーに使用するエンコード: マルチベースでエンコードされたCIDか、base58btcでエンコードされたマルチハッシュのどちらかである。b58mh|base36|k|base32|b…}を取る。デフォルト: base36。必須ではない。×

    Response

    成功すると、このエンドポイントへの呼び出しは、200と次のボディで返されます

    {
      "Name": "<string>",
      "Value": "<string>"
    }

    cURL Example

    curl -X POST "http://127.0.0.1:5001/api/v0/name/publish?arg=<ipfs-path>&key=self&resolve=true&lifetime=48h0m0s&ttl=1h0m0s&quieter=<value>&v1compat=true&allow-offline=<value>&ipns-base=base36"

    データの反映確認

    /api/v0/name/resolve

    IPNS名を解決する。

    引数

    パラメータ説明必須
    arg [文字列]解決するIPNS名。デフォルトはノードのpeerID×
    recursive [bool]結果がIPNS名でなくなるまで解決する。デフォルト:true×
    nocache [bool]キャッシュされたエントリーを使用しない×
    dht-record-count [uint]DHT 解決のために要求するレコード数。デフォルト: 16×
    dht-timeout [string]DHT 解決中に値を収集する最大時間。タイムアウトなしの場合は0を渡します。デフォルト:1m0s×
    stream [bool]見つかったエントリーをストリームする×

    Response

    成功すると、このエンドポイントへの呼び出しは、200と次のボディで返されます:

    {
      "Path": "<string>"
    }

    cURL Example

    curl -X POST "http://127.0.0.1:5001/api/v0/name/resolve?arg=<name>&recursive=true&nocache=<value>&dht-record-count=16&dht-timeout=1m0s&stream=<value>"

    -EVM