Учитывая довольно большую папку, которая уже была перенесена в сеть и удалена локально. Как файл будет добавлен в эту папку, без повторной загрузки всей папки?
IPFS: как добавить файл в существующую папку?
Ответ 1
Вы можете сделать это только с помощью ipns после загрузки с помощью ipfs get
, который должен быть быстрым, если он все еще привязан к вашему локальному хранилищу:
(1) сначала добавить (то есть повторно добавить) вашу папку в ipfs рекурсивно: ipfs add -r /path/to/folder
. Второй столбец последней строки stdout имеет хеш ipfs родительской папки, которую вы только что добавили. (Исходные файлы все те же, поэтому хеши будут одинаковыми.)
(2), затем опубликуйте этот хеш: ipfs name publish /ipfs/<CURRENT_PARENTFOLDER_HASH>
. Это вернет идентификатор сверстника, и вы можете поделиться ссылкой как /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
Ответ 2
Это должно быть легко с файловым 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
Файловый API не закрепляет файлы, на которые есть ссылки, и не извлекает какие-либо подпапки без необходимости, поэтому это можно сделать на любом узле в сети без большого трафика.
[Редактировать] Через некоторое время я узнаю, что есть еще несколько вещей, которые вы можете сделать:
Вместо
ipfs files cp /ipfs/QmNewFileHash /folder-to-modify/new-file
вы можете использовать
ipfs files write -te
, если вы еще не добавили файл в ipfs.- Вы можете включить функции записи HTTP API для использования запросов
PUT
для получения хэшей новых версий папки. Смотрите этот блог. - Вы можете смонтировать ipns через предохранитель и записать в
…/ipns/local
. - И, вероятно, лучше всего: вы можете использовать
ipfs object patch add-link /ipfs/QmExistingLargeFolderHash new-file /ipfs/QmNewFileHash
, чтобы сделать это за один шаг
Ответ 3
Нет, не можешь. Концепция IPFS неизменна, папка - это просто дерево файлов, поэтому вы не можете "добавлять" файлы после добавления папки, не имея полной папки под рукой.