かなり大きなフォルダがあるとすると、それはすでにネットワークにプッシュされ、ローカルで削除されています。フォルダ全体を再ダウンロードせずに、ファイルをそのフォルダに追加するにはどうすればよいですか?
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
これはファイル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
を使用できます。
PUT
リクエストを使用して、フォルダーの新しいバージョンのハッシュを取得できます。 このブログ投稿 を参照してください。…/ipns/local
に書き込むことができます。ipfs object patch add-link /ipfs/QmExistingLargeFolderHash new-file /ipfs/QmNewFileHash
を使用して1つのステップでそれを行うことができます