如何检查指定<ipfs_hash>是否已完整下载到IPFS本地节点?
可行解决方案
- 优先使用
ipfs dag verify <ipfs_hash> --offline命令
该命令会递归校验目标哈希对应整个DAG链路的所有关联块是否全部存在于本地,只要有任意一个子块缺失就会返回错误,是专门用于校验IPFS资源完整下载的原生工具,执行效率极高,不会遍历全量本地哈希,完全满足你的需求。如果你的IPFS节点版本较低没有该命令,可改用ipfs refs --recursive --offline <ipfs_hash>,执行无报错即代表所有关联块均已存储在本地,执行效率同样远高于全量遍历本地哈希。 - 若你要校验的是UnixFS格式的文件或目录,也可以使用
ipfs files stat --offline /ipfs/<ipfs_hash>
该命令会尝试读取目标IPFS路径的完整元数据,如果资源未完整下载到本地,会直接返回块缺失的报错,也可作为校验依据。
原校验逻辑失效的原因
你之前遇到的 ipfs --offline block stat 不报错的问题,本质是因为 ipfs object stat 执行时会自动拉取目标哈希对应的根块元数据到本地,block stat 只能检测单个块是否存在,无法感知根块关联的所有子块是否下载完成,自然无法用来判断整个资源是否完整落地。
内容的提问来源于stack exchange,提问作者alper
相关产品推荐
相关产品推荐

