ipfs 分布式星际文件系统使用教程
IPFS 介绍
星际文件系统(InterPlanetary File System,缩写为IPFS)是一个旨在实现文件的分布式存储、共享和持久化的网络传输协议。该技术诞生于 2014 年,由协议实验室(Protocol Labs)创建,IPFS 整合了最先进的网络技术,如(BitTorrent、DHT、Git、SFS等)。
IPFS 用途
参考
安装
Start a container running ipfs and expose ports 4001 (P2P TCP/QUIC transports), 5001 (RPC API) and 8080 (Gateway):
docker pull ipfs/kubo
docker run -d --name ipfs -p 4001:4001 -p 4001:4001/udp -p 8080:8080 -p 5001:5001 ipfs/kubo
docker logs -f ipfs
docker exec ipfs ipfs swarm peers
或者使用 docker-compose 安装
version: '3'
services:
ipfs:
image: ipfs/kubo
restart: always
ports:
#- "4001:4001" # P2P TCP/QUIC transports
#- "8080:8080" # Gateway
- "5001:5001" # RPC API
在 spring boot 项目使用 ipfs 存储 Java 对象
当做序列化存储的后端。
创建一个 Java spring boot 项目,引入依赖
<dependency>
<groupId>com.github.ipfs</groupId>
<artifactId>java-ipfs-api</artifactId>
<version>v1.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.22</version>
</dependency>
创建一个 Person 类
public class Person {
private String name;
private String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public Person() {
}
}
创建一个测试类
public class IPFSdemo {
private static IPFS ipfs = new IPFS("/ip4/127.0.0.1/tcp/5001");
public static String saveToIpfs(Person person) throws IOException {
MerkleNode put = ipfs.dag.put("json", JSON.toJSONString(person).getBytes());
return put.hash.toString();
}
public static Person getFromIpfs(String hash) throws IOException {
Cid expected = Cid.decode(hash);
byte[] get = ipfs.dag.get(expected);
return JSON.parseObject(get,Person.class);
}
public static void main(String[] args) throws IOException {
String hash = saveToIpfs(new Person("SongYangCong","KunMing"));
System.out.println("hash:"+hash);
Person p = getFromIpfs(hash);
System.out.println(p.toString());
}
}
问题解决
- 无法连接到IPFS API,Unable to connect to the provided IPFS API address
这是 kubo UI 的 bug。
参考连接: