星际文件系统IPFS(Inter-Planetary File System)是一个面向全球的、点对点的分布式文件存储协议
,目的是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP)
,通过一个文件系统将网络中所有的设备连接起来,构建一个更快速、更安全、开放分享的互联网。
IPFS用基于内容的寻址替代传统的基于域名的寻址
,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。通过这样可以让网页的速度更快、更安全、更健壮、更持久。
IPFS是通用目的的基础架构,基本没有存储上的限制
。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。
IPFS协议定义了文件在分布式系统中如何存储,索引,和传输。能永久的、去中心化保存和共享文件,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。
IPFS提供了一个友好的WEB访问接口,用户可通过http://ipfs.io/hash 获取IPFS网络中的内容,也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。
官网下载
百度网盘下载
go-ipfs_v0.4.14_windows-amd64.zip
到指定安装目录
PATH
=C:\ipfs\go-ipfsIPFS_PATH
=C:\Users\answer\Desktop\ipfs不配置 IPFS_PATH 环境变量的话, 默认初始化节点的仓库目录为 ~/.ipfs, 配置了环境变量, 初始化节点时的仓库目录指向环境变量的值
λ ipfs init
initializing IPFS node at C:\Users\answer\Desktop\ipfs
generating 2048-bit RSA keypair...done
peer identity: QmagYckojeodgk2XTYn9y6pM99P611SQ8akASDHKsp3QUe
to get started, enter:
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
λ ipfs id
{
"ID": "QmagYckojeodgk2XTYn9y6pM99P611SQ8akASDHKsp3QUe",
"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDG32/5h1KOZ1ZeKamMxin/TpfbofHE6cZEGQ6rEMrNTXGTW49KkJ7MwcO2p7xzELvLwYrLX7XHlUJ0v7kMI5DRBquTr/BvBidQAk7KVtDzZgGv/TG8QUIHcYVqsXWZXopYvYzPQpKnX0TUWiSOw4Szzk+hwgBwIX/RP1VGjDMi/Y+idTvlnGR6wZHlDmUalWrvVkd/OKLX4y0u/dvnV4Za6YC7Wg5WlbpACsSRMEAkLcQ9VBNNgJHQF86sQ/D++NTr76rE5wsCS7O0lSsqlBnA8uKGwil94PIJ07HMiGjErX8AV+9K+g8MkHSFxuLq2hMoy8zjMUF66tgw1J9Pi+rxAgMBAAE=",
"Addresses": null,
"AgentVersion": "go-ipfs/0.4.14/",
"ProtocolVersion": "ipfs/0.1.0"
}
λ ipfs add ipfs.md
added QmUS8fPbj3NAxgN7fd8HauXRBUjAFdYXnoxbGBBQ6uajm2 ipfs.md
ipfs.md 文件内容
Hello world, Hello IPFS(Inter-Planetary File System)
Created By AnswerAIL At 2019-6-5
λ ipfs cat QmUS8fPbj3NAxgN7fd8HauXRBUjAFdYXnoxbGBBQ6uajm2
Hello world, Hello IPFS(Inter-Planetary File System)
Created By AnswerAIL At 2019-6-5
节点启动的情况下
, 也可以通过浏览器访问: http://localhost:8080/ipfs/hash
如: http://localhost:8080/ipfs/QmPWVjXm46BNoPeB7MpDjWzEWPW2HgyNnfaCGt9mgFh4Rs
λ del C:\Users\answer\Desktop\ipfs
C:\Users\answer\Desktop\ipfs\*, 是否确认(Y/N)?
λ ipfs add -r answerail\
added QmUS8fPbj3NAxgN7fd8HauXRBUjAFdYXnoxbGBBQ6uajm2 answerail/answer/answer.md
added QmUS8fPbj3NAxgN7fd8HauXRBUjAFdYXnoxbGBBQ6uajm2 answerail/ipfs.md
added QmNjsGC9ad5M6bNjD1E2nfM7peib3MWXoYxv2bNkVmjedt answerail/answer
added QmZ5X9YC2bXD4m4ULQMq1vNxEkZerSZGeY3xTjHLDHsntC answerail
answer.md 和 ipfs.md 文件内容一样, 所以返回的 hash 也是一样的
ipfs创建文件夹: ipfs files mkdir /answer
ipfs查看文件列表: ipfs files ls /
λ ipfs files ls /
answer
启动节点: ipfs daemon
下载ipfs上的文件到本地: ipfs get hash
λ ipfs get QmUS8fPbj3NAxgN7fd8HauXRBUjAFdYXnoxbGBBQ6uajm2
Saving file(s) to QmUS8fPbj3NAxgN7fd8HauXRBUjAFdYXnoxbGBBQ6uajm2
101 B / 101 B [============================================================] 100.00% 0s
λ ipfs config Datastore.StorageMax
10GB
配置文件存放在 节点仓库目录下的 config 文件。 如: C:\Users\answer\Desktop\ipfs\config
设置配置: ipfs config Datastore.StorageMax 5G
帮助命令: ipfs --help
文件帮助命令: ipfs files --help
# 请依次执行以下命令
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"]'
# 请依次执行以下命令
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\"]"