关于 ipfs
ipfs 是围绕 IPFS 构建的技能,面向需要在去中心化网络中存储和共享文件的开发者。它涵盖内容寻址、节点连接、固定存储及常用命令。
主要功能
- 01按内容哈希寻址文件
- 02通过 DHT 发现节点
- 03使用 IPLD 组织数据
- 04固定文件以防回收
- 05通过 CLI 和 HTTP API 操作
适用场景
- 01归档区块链数据
- 02在点对点网络中共享文件
- 03存储 NFT 元数据
- 04从 CID 获取并验证文件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill ipfs安装后在 Claude Code 中输入/ipfs确认已加载。
详细介绍
ipfs
用途
IPFS(星际文件系统)是一种用于在去中心化网络中存储和共享文件的点对点协议,无需中央服务器即可确保数据持久性。
适用场景
构建需要分布式存储来增强韧性的应用时,可使用 IPFS,例如区块链数据归档、点对点文件共享,或在不可靠网络中分发内容。对于涉及大文件或抗审查数据的场景也可使用,例如存储 NFT 元数据或构建去中心化应用。
主要功能
- 去中心化存储:文件通过内容哈希寻址(例如 CID,如 Qm...abc),可通过任意节点进行全局访问。
- 节点发现:使用 DHT 自动连接节点;可通过
ipfs config Addresses.Swarm --json '["/ip4/0.0.0.0/tcp/4001"]'进行配置。 - 版本管理:支持 IPLD,用于链接数据结构;使用
ipfs dag put添加 DAG 节点。 - 加密:可借助外部工具加密文件;添加文件前,可集成 libsodium 进行对称加密。
- 固定:使用
ipfs pin add <CID>手动将文件固定在本地存储中,避免被垃圾回收。
使用模式
添加文件时,在 CLI 中运行 ipfs add path/to/file.txt,然后通过 CID 引用该文件。在代码中,可使用 Go IPFS 库:导入 "github.com/ipfs/go-ipfs-api",并调用 sh := shell.NewShell("localhost:5001"); cid, err := sh.Add(strings.NewReader("data"))。在脚本中,使用 try-catch 封装命令以处理错误,例如先运行 ipfs daemon 检查守护进程是否正在运行。调用 API 时,可使用 HTTP 端点,例如通过 multipart 表单数据调用 POST /api/v0/add。
常用命令/API
- 添加文件:
ipfs add -r /path/to/dir(目录的递归标志);API:使用包含文件的请求体调用 POST /api/v0/add。 - 获取文件:使用
ipfs cat <CID>将内容输出到 stdout;API:GET /api/v0/cat?arg=。 - 列出固定项:
ipfs pin ls --type=recursive;使用--enc=json获取 JSON 输出。 - 配置设置:使用
ipfs config --json Datastore.StorageMax "10GB"设置存储上限;配置文件为 ~/.ipfs/config 中的 JSON 文件。 - 启动守护进程:使用
ipfs daemon --enable-pubsub启用 pubsub 功能;如果需要 API 密钥(例如用于企业网关),请设置环境变量,例如export IPFS_API_KEY=$SERVICE_API_KEY,并将其加入请求头。 使用 curl 添加文件的代码片段:
curl -X POST -F [email protected] http://localhost:5001/api/v0/addGo 代码片段:
cid, err := sh.AddFile("/path/to/file.txt")
集成说明
可通过在本地运行守护进程或使用公共网关(例如 https://ipfs.io/ipfs/)将 IPFS 与其他工具集成。对于区块链,可将 IPFS 与 Ethereum 结合以存储合约元数据;使用 web3.js 获取 CID。在代码中设置 API 端点:shell.NewShell("http://$IPFS_GATEWAY:5001"),其中 $IPFS_GATEWAY 是环境变量。若使用私有 API 进行身份验证,请添加类似 Authorization: Bearer $IPFS_API_KEY 的请求头。对于多网络配置,可在配置文件中指定 swarm 地址,例如添加 ipfs bootstrap add /ip4/1.2.3.4/tcp/4001/ipfs/Qm... 来指定自定义节点。
错误处理
先运行 ipfs id 检查常见错误,例如“守护进程未运行”;如果失败,请启动 ipfs daemon。遇到网络问题时,可使用 ipfs swarm connect /ip4/host/tcp/port 手动连接节点。解析 API 错误时,请注意响应包含带有 "Message" 字段的 JSON,例如 {"Message": "file not found"}。在代码中,在调用 sh.Add() 后进行如下错误处理:
if err != nil { log.Fatal(err) }。对于权限错误,请确保已设置有效的 $IPFS_API_KEY;对于暂时性故障,请使用指数退避重试。执行操作前,使用 ipfs validate <CID> 验证 CID。
具体使用示例
- 上传文件以存储在区块链上:首先,确保 IPFS 守护进程正在运行。添加文件:
ipfs add contract.json会输出一个 CID,例如 Qmabcd。将此 CID 存储在智能合约中。在 Node.js 中:
const ipfsApi = require('ipfs-api'); const ipfs = ipfsApi('localhost', '5001', {protocol: 'http'}); ipfs.add(Buffer.from('contract data')).then(response => console.log(response[0].hash)); - 检索并验证文件:通过 CID 获取文件:
ipfs get Qmabcd -o output.txt。在脚本中验证完整性:运行ipfs cat Qmabcd | sha256sum,并与原始哈希值匹配。对于分布式应用,可在循环中使用:获取多个 CID,并通过 try-catch 处理缺失的文件。
图关系
- 相关项:区块链(集群),因为 IPFS 为区块链数据提供去中心化存储。
- 通过标签关联:p2p(链接到其他 P2P 协议)、decentralized-storage(与分布式数据库相关)、distributed-filesystem(与文件共享技能重叠)。