文章目录

  • ​​1. 什么是 IPFS​​
  • ​​2. 节点软件下载​​
  • ​​3. 安装节点软件​​
  • ​​4. 命令操作​​
  • ​​5. ipfs跨域资源共享CORS配置​​
  • ​​5.1 mac 系统​​
  • ​​5.2 windows 系统​​
  • ​​6. Reference​​

1. 什么是 IPFS

  • 星际文件系统IPFS(Inter-Planetary File System)是一个​​面向全球的、点对点的分布式文件存储协议​​,​​目的是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP)​​,通过一个文件系统将网络中所有的设备连接起来,构建一个更快速、更安全、开放分享的互联网。
  • IPFS用​​基于内容的寻址替代传统的基于域名的寻址​​,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。通过这样可以让网页的速度更快、更安全、更健壮、更持久。
  • IPFS是通用目的的基础架构,基本​​没有存储上的限制​​。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。
  • IPFS协议定义了文件在分布式系统中如何存储,索引,和传输。能永久的、去中心化保存和共享文件,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。
  • IPFS提供了一个友好的WEB访问接口,用户可通过http://ipfs.io/hash 获取IPFS网络中的内容,也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。

 

2. 节点软件下载

 

3. 安装节点软件

  1. 解压节点软件安装包 ​​go-ipfs_v0.4.14_windows-amd64.zip​​ 到指定安装目录
  2. 配置环境变量
  • ​PATH​​=C:\ipfs\go-ipfs
  • ​IPFS_PATH​​=C:\Users\answer\Desktop\ipfs

​不配置 IPFS_PATH 环境变量的话, 默认初始化节点的仓库目录为 ~/.ipfs, 配置了环境变量, 初始化节点时的仓库目录指向环境变量的值​

 

4. 命令操作

  • 初始化节点: ipfs init
λ 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
λ 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: ipfs add file
λ 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

 

  • 通过hash查看文件: ipfs cat hash
λ 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 ${IPFS_PATH}
λ del C:\Users\answer\Desktop\ipfs
C:\Users\answer\Desktop\ipfs\*, 是否确认(Y/N)?

 

  • 上传目录: ipfs add -r answerail\
λ 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
λ ipfs config Datastore.StorageMax
10GB

​配置文件存放在 节点仓库目录下的 config 文件。 如: C:\Users\answer\Desktop\ipfs\config​​  

  • 设置配置: ipfs config Datastore.StorageMax 5G
     
  • 帮助命令: ipfs --help
     
  • 文件帮助命令: ipfs files --help

 

5. ipfs跨域资源共享CORS配置

5.1 mac 系统

# 请依次执行以下命令
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"]'

 

5.2 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\"]"

 

6. Reference