DAPP结合IPFS-去中心化图床1

内容:打造一款去中心化图床,用户可上传图片至IPFS上,文件的散列保存在以太坊的区块上,以此实现永存的去中心化图床。

星际文件系统IPFS(InterPlanetary File System)是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。

类似BT下载的P2P文件存储,传输系统

1.在ipfs官网上下载安装包,地址:https://dist.ipfs.io/#go-ipfs (需要翻墙)

解压进入到文件目录然后在命令行界面执行三个命令:

ipfs init :创建本地节点

ipfs id:查看节点ID

ipfs daemon:启动节点服务器(可上传文件到外网/同步外网文件)

终端输出如下:

F:\ifps>cd go-ipfs

F:\ifps\go-ipfs>ipfs init

initializing IPFS node at C:\Users\admin\.ipfs

generating 2048-bit RSA keypair...done

peer identity: QmPYEtTVaVJ7sRwceA13g3eY2kaBWgxgnc2EZxWe7KVhYQ

to get started, enter:

ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

F:\ifps\go-ipfs>ipfs id

{

"ID": "QmPYEtTVaVJ7sRwceA13g3eY2kaBWgxgnc2EZxWe7KVhYQ",

"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5RPj+dC

UESvQOxRPoH0uT3nFSd0Dw5eCgELB7PS71xzODiqHLjOmEda8qcCpJVp3KuI4X+ekITYwlsiWSt9SuT6

dpMxQh/xg1iImM4l+V70jiyV+BU/6LkNshTxzXVGzixX418iJyrcCdoEsjF+XQIJo57ZzhsJnQVwJWpD

UO4Mws5NnuzwaIIGvKm9LJc3FzsEgG/9wMpb4wcOKMhKvgWa+aXAfnuVQjvBMAILabXVzz2JqjcVrrxU

zbRv03G4cZoITzNEyzETZQ3ASGhxvWtqhyDAFdfh9kVxtXtq70OzPddEn2u5tEqpywedXfocqEtOXXLW

37bUPRfIRh7KpvAgMBAAE=",

"Addresses": null,

"AgentVersion": "go-ipfs/0.4.14/",

"ProtocolVersion": "ipfs/0.1.0"

}

F:\ifps\go-ipfs>ipfs daemon

Initializing daemon...

Swarm listening on /ip4/10.1.1.183/tcp/4001

Swarm listening on /ip4/127.0.0.1/tcp/4001

Swarm listening on /ip4/172.16.6.83/tcp/4001

Swarm listening on /ip6/::1/tcp/4001

Swarm listening on /p2p-circuit/ipfs/QmPYEtTVaVJ7sRwceA13g3eY2kaBWgxgnc2EZxWe7KV

hYQ

Swarm announcing /ip4/10.1.1.183/tcp/4001

Swarm announcing /ip4/127.0.0.1/tcp/4001

Swarm announcing /ip4/172.16.6.83/tcp/4001

Swarm announcing /ip6/::1/tcp/4001

API server listening on /ip4/127.0.0.1/tcp/5001

Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080

Daemon is ready

[0;37m11:44:37.679 [31mERROR [0;34m bitswap: [0mError writing block to dat

astore: Access is denied. [0;37mbitswap.go:385[0m

[0;37m11:44:37.679 [31mERROR [0;34m bitswap: [0mError writing block to dat

astore: Access is denied. [0;37mbitswap.go:385[0m

IPF问题服务器节点启动之后可以浏览器访问查看管理界面,有本地配置信息,节点连接信息,本地节点文件信息等等。如图:

2.IPFS基本的操作

我们进入到ipfs创建节点的目录(如果是linux或者OS则创建在根目录,我用的windows没有全局安装,进入当前目录指令才有用):

1)创建一个测试文件file.txt,里面的内容为hello ipfs:

2)上传文件到ipfs指令:ipfs add file.txt

此处返回的为文件的哈希值:QmPnnvFkvSCmPvMdMtSNbXrFWQX5XYc4YkcVU4cujyyH8Z

3)查看ipfs上的文件指令:

ipfs cat QmPnnvFkvSCmPvMdMtSNbXrFWQX5XYc4YkcVU4cujyyH8Z

可见输出为 hello ipfs,正是我们上传文件的内容。

ps:

此时文件只是添加到了本地的IPFS节点,可以通过终端读取到。当通过启动本地节点服务器后,也可以通过访问文件。在启动节点服务器后,将本地节点文件同步至外网,当同步完成后,就可以通过访问到文件。至此你的文件已经永存在ipfs网络上了!由于目前IPFS网络暂未加入代币机制,所以存储读取文件均免费,当然了,速度也慢很多。

访问http://localhost:8080/ipfs/QmPnnvFkvSCmPvMdMtSNbXrFWQX5XYc4YkcVU4cujyyH8Z

效果如图:

4)下载ipfs上的文件指令:

ipfs get QmPnnvFkvSCmPvMdMtSNbXrFWQX5XYc4YkcVU4cujyyH8Z

打开ipfs的目录文件,可见以此哈希值命名的文件已下载好

5)上传整个目录指令:

ipfs add -r files/

上传整个目录时,所有文件都有其对应的散列,并且每个目录都有其散列,访问某个文件有两种方式:

1.直接通过问价散列访问

2.通过访问

IPFS还有很多有趣的地方。例如可以上传一个静态网站到森林小组,并通过浏览器访问,这样就创建了一个永存的网站,往IPFS上传相同的文件,由于相同的哈希,系统会自动识别,只给后上传的用户建立已有文件的索引,而不是上传一份相同的文件,这样节省很多空间。同时如果一个文件是在另一个文件的基础上修改了写内容而导致的散列不同,那么他们相同的内容也不会重复存储,而只是在原文件上拼接不同的部分。总之,IPFS系统有很多高明之处,需要仔细研究

3.ipfs配置:

当我们在前端通过JS接口操作IPF问题时,会遇到跨域问题,只需终端执行以下配置即可:

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"]'

或者进入http://localhost:5001/webui进入管理界面手动改代码进行配置

如图:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180417G0V7SA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券