js ipfs实现
IPFS 简介
IPFS(InterPlanetary File System)是一种分布式文件存储协议,允许用户在去中心化网络中存储和共享文件。通过内容寻址(CID)替代传统的基于位置的寻址,确保数据的唯一性和持久性。
安装 js-ipfs
使用 npm 或 yarn 安装 js-ipfs 库:
npm install ipfs
# 或
yarn add ipfs
初始化 IPFS 节点
创建一个简单的 IPFS 节点实例:

const IPFS = require('ipfs');
const node = await IPFS.create();
console.log('IPFS 节点已启动');
添加文件到 IPFS
通过 node.add 方法上传文件或数据:
const data = 'Hello, IPFS!';
const { cid } = await node.add(data);
console.log('文件 CID:', cid.toString());
从 IPFS 获取文件
使用 CID 检索文件内容:

const stream = node.cat(cid);
let content = '';
for await (const chunk of stream) {
content += chunk.toString();
}
console.log('文件内容:', content);
发布与订阅消息
通过 pubsub 实现节点间通信:
const topic = 'my-topic';
// 订阅主题
await node.pubsub.subscribe(topic, (msg) => {
console.log('收到消息:', msg.data.toString());
});
// 发布消息
await node.pubsub.publish(topic, Buffer.from('Hello from IPFS pubsub!'));
跨域配置(可选)
若在浏览器中使用,需配置 CORS:
const node = await IPFS.create({
config: {
Addresses: {
Swarm: ['/ip4/0.0.0.0/tcp/4002', '/ip4/127.0.0.1/tcp/4003/ws'],
},
API: {
HTTPHeaders: {
'Access-Control-Allow-Origin': ['*'],
},
},
},
});
关闭节点
结束时清理资源:
await node.stop();
console.log('节点已关闭');
注意事项
- 浏览器环境需使用
js-ipfs-http-client连接远程节点。 - 生产环境建议配置持久化存储(如
repo选项)。 - 大文件上传需分块处理(通过
node.add的chunker参数)。
完整示例参考 js-ipfs 官方文档。






