注意
IPFS是永久网络,放上去就会被别的节点缓存,不能撤销,所以内容不能随便放哦
IPFS 是什么
IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。
内容可寻址:通过文件内容生成唯一哈希值来标识文件,而不是通过文件保存位置来标识。相同内容的文件在系统中只会存在一份,节约存储空间
版本化:可追溯文件修改历史
点对点超媒体:P2P 保存各种各样类型的数据
可以把 IPFS 想象成所有文件数据是在同一个 BitTorrent 群并且通过同一个 Git 仓库存取。总之,它集一些成功系统(分布式哈希表、BitTorrent、Git、自认证文件系统)的优势于一身,是一套很厉害的文件存取系统。
IPFS 使用场景
IPFS 的发明者 Juan Benet(juan@benet.ai)在 IPFS 技术白皮书中假设了一些使用场景:
在 /ipfs 和 /ipns 下挂载全球文件系统挂载的个人同步文件夹,拥有版本功能文件加密,数据共享系统
可用于所有软件的带版本的包管理器(已经实现了:https://github.com/whyrusleeping/gx)
可以作为虚机的根文件系统
可以作为数据库:应用可以直接操作 Merkle DAG,拥有 IPFS 提供的版本化、缓存以及分布式特性
可以做(加密)通讯平台
各种类型的 CDN
永久的 Web,不存在不能访问的链接
安装
1、安装Go环境
2、下载对应安装包
tar xvfz go-ipfs_v0.4.10_darwin-amd64.tar.gz
cd go-ipfs
./install.sh
#在本地计算机建立一个IPFS节点
ipfs init
------------------------------------------------------------------------
initializing IPFS node at /Users/vampire/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmNRmN1JKdMkKpomcanJThJF4zL6ch5BejPFzP1RRFawYg
to get started, enter:
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
http://localhost:5001/ipfs/QmQLXHs7K98JNQdWrBB2cQLJahPhmupbDjRuH1b9ibmwVa/#/home
-------------------------------------------------------------------------
#启动节点服务器
ipfs daemon
ipfs daemon &
#修改节点默认存储空间
export EDITOR=/usr/bin/vim
ipfs config edit
#查看节点id
ipfs id
#跨域资源共享CORS配置
ctrl- c退出ipfs
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
#验证
#启动服务器
ipfs daemon
#新建终端执行下面的命令
ipfs cat /ipfs/QmNRmN1JKdMkKpomcanJThJF4zL6ch5BejPFzP1RRFawYg/readme
#查看ipfs相关命令
ipfs help
#添加文件到ipfs节点
ipfs add test.java
added QmTz6eJrK3zEHPDtLCSfKYrVqDHXs5KYHuNbRxW7yWr7W2 test.java
ipfs cat QmTz6eJrK3zEHPDtLCSfKYrVqDHXs5KYHuNbRxW7yWr7W2
#同步到全网络(IPFS网络)
新建终端执行 ipfs daemon
https://ipfs.io/ipfs/QmTz6eJrK3zEHPDtLCSfKYrVqDHXs5KYHuNbRxW7yWr7W2
#通过ipfs创建目录存储文件
#cp不会改变文件hash,mv会改变hash寻址
ipfs files mkdir /hahaha
ipfs files cp /ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T /hahaha/file.txt
ipfs files ls /
ipfs files ls /hahaha/
ipfs files read /hahaha/file.txt
#IPFS新增一个目录
#使用ipfs add -r可以上传一整个目录
ipfs add -r ipfs-tutorial/
#通过路径访问contactme.txt文件数据
#如果我们上传的是目录,那么可以通过下面几种方式访问到contactme.txt文件的数据。
ipfs cat QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
ipfs cat /ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
ipfs cat /ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek/contactme.txt
#通过Hash查看数据IPFS网络数据
访问目录:
https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek
通过目录访问文件:https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek/contactme.txt
通过文件hash直接访问:
https://ipfs.io/ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
#创建简易的网页发布到IPFS
#创建site文件夹,创建index.html和style.css文件,添加到ipfs
ipfs add -r site/
#先通过ipfs daemon同步网络,然后可以通过https://ipfs.io/ipfs/<你的项目根目录hash>,
即 https://ipfs.io/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp访问项目
#访问网站 https://ipfs.io/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp
```