IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。
IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。
IPFS提供了一个友好的WEB访问接口,用户可通过http://ipfs.io/hash 获取IPFS网络中的内容,也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。
ipfs官网
作为windows的用户,只需要双击ipfs.exe即可,然后将go-ipfs文件夹的路径加入path环境变量当中,我们就可以到处使用ipfs的命令行了
随后记得调用
ipfs init
调用
ipfs id
可以查看ipfs的节点,不过在这之前,我们要启动ipfs的节点服务器才能查看的到节点服务器的id
ipfs daemon
之所以要进行cors配置呢,具体原理我也不是很明白啊,不过在之后的项目当中,当使用ipfs上传数据添加的时候,会发生拒绝访问的错误,必须要进行跨域的配置才可以。
首先退出ipfs的节点,好不容易才查到windows和mac不一样,为什么网上都是mac的命令行,坑了半天才运行好
然后ios的系统请依次运行
localhost:ipfs-http-demo yuechunli$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
localhost:ipfs-http-demo yuechunli$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
localhost:ipfs-http-demo yuechunli$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'
localhost:ipfs-http-demo yuechunli$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers '["Authorization"]'
localhost:ipfs-http-demo yuechunli$ ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers '["Location"]'
windows依次执行
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\"PUT\", \"GET\", \"POST\", \"OPTIONS\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"*\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials "[\"true\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers "[\"Authorization\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers "[\"Location\"]"
完成之后,在官网中提供了一个例子
我们开启节点
ipfs daemon
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
就可以通过http://localhost:5001/webui看到官方给我们提供的项目例子了。
将一个本地的文件添加到ipfs当中
ipfs add file.txt
然后通过
ipfs cat 生成的hash
查看文件的内容
然后新建终端
ipfs daemon
就可以在
https://ipfs.io/ipfs/文件的hash
网络上查看到自己的问价内容了
查看文件内容
ipfs cat 文件的hash
拷贝文件到新的文件夹
ipfs files cp /ipfs/文件的hash/LiYueChun/file.txt
如果有多层目录,使用下面命令一将所有的目录上传ipfs
ipfs add -r 包含多层目录的文件夹名字
在自己新建的文件夹目录下创建index.html和style.css文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello IPFS!title>
<link rel="stylesheet" href="./style.css" />
head>
<body>
<h1>Hello IPFS!h1>
body>
html>
h1 {
color: red;
}
使用命令发布
ipfs add -r new/
added QmZ9KW5PYYmxGznsBgomafDumqWtuu6tahknNVMo3BmXjH new/index.html
added QmQEmS1eHxqmc31pm1hbWF8x8ESmX2ygbQPUgQX3WLLqVm new/style.css
added QmbFdD6BQrW6SwjsW5fTpYLW1LWv53FxPTouTto9Q5FED6 new
最后一行是根目录的hash,我们通过 https://ipfs.io/ipfs/<你的项目根目录hash>就可以访问网站了
什么是ipns呢,ipns又有什么作用呢。我们应该知道,本地通过ipfs daemon创建的节点是唯一的,但是我们的文件只要内容改变了就会产生不同的hash,ipns的作用就是将内容和本地的节点绑定,这样更新内容的时候我们就可以绑定本地节点,然后通过ipns+本地的节点来访问网站了,网站的网址也不用随着文件内容改变而改变了
那么怎么绑定:
ipfs name publish 你的上传的文件的hash
然后我们同过ipfs id查看到本地节点之后通过下面的链接来访问我们的网站,要注意是ipns哦
https://ipfs.io/ipns/QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP