web-dev-qa-db-ja.com

IPFS:既存のフォルダーにファイルを追加するにはどうすればよいですか?

かなり大きなフォルダがあるとすると、それはすでにネットワークにプッシュされ、ローカルで削除されています。フォルダ全体を再ダウンロードせずに、ファイルをそのフォルダに追加するにはどうすればよいですか?

15

ipfs getを使用して再度ダウンロードした後、ipnsを使用することによってのみ実行できます。これは、ローカルストレージに固定されている場合は高速です。

(1)最初にフォルダをipfsに再帰的に追加(つまり再追加)します:ipfs add -r /path/to/folder。最後のstdout行の2番目の列には、追加した親フォルダーのipfsハッシュが含まれています。 (元のファイルはまだ同じなので、ハッシュも同じになります。)

(2)次に、そのハッシュを公開します:ipfs name publish /ipfs/<CURRENT_PARENTFOLDER_HASH>。これによりピアIDが返され、リンクを/ipns/<PEER_ID>として共有できます。フォルダの内容(したがって親フォルダのハッシュ)が変更されるたびに、この手順(ipfs name publish)を繰り返します。 ipnsオブジェクトは、常に最新バージョンのフォルダーを指します。

(3)多くの共有を計画している場合は、共有するフォルダーごとに新しいキーペアを作成できます:ipfs key gen --type=rsa --size=2048 new-share-key…次に、(デフォルトのキーの代わりに)そのキーを使用してそのフォルダーを公開(および後で再公開)します:ipfs name publish --key=new-share-key /ipfs/<CURRENT_PARENTFOLDER_HASH>

こちらのドキュメントも参照してください: https://ipfs.io/docs/commands/#ipfs-name-publish

11
JayB

これはファイルAPIで簡単にできるはずです。新しいファイルをすでにipfsに追加し、そのハッシュを取得していると仮定して、次のことを試してください。

ipfs files cp /ipfs/QmExistingLargeFolderHash /folder-to-modify
ipfs files cp /ipfs/QmNewFileHash /folder-to-modify/new-file

もちろん、これは既存のフォルダーにファイルを追加するのではなく(フォルダーとファイルは不変であるため)、新しいファイルが追加されたフォルダーのコピー/新しいバージョンを作成するだけです。したがって、新しいハッシュがあります。

ipfs files stat /folder-to-modify

Files APIは、参照されるファイルを固定したり、必要な場合を除いてサブフォルダーを取得したりしないため、大量のトラフィックを発生させることなく、ネットワーク内の任意のノードでこれを実行できます。

[編集]しばらくして、あなたができることがもっといくつかあることを知りました:

  • の代わりに

    ipfs files cp /ipfs/QmNewFileHash /folder-to-modify/new-file
    

    ファイルをまだipfsに追加していない場合は、ipfs files write -teを使用できます。

  • HTTP APIの書き込み機能を有効にして、PUTリクエストを使用して、フォルダーの新しいバージョンのハッシュを取得できます。 このブログ投稿 を参照してください。
  • Fuseを介してipnsをマウントし、…/ipns/localに書き込むことができます。
  • そしておそらく最良:ipfs object patch add-link /ipfs/QmExistingLargeFolderHash new-file /ipfs/QmNewFileHashを使用して1つのステップでそれを行うことができます
7
Caesar