IPFS是一种分布式存储系统,保存在IPFS系统里的文件具有以下特点:
不可删除也不可修改
理论上会永久储存
历史记录会永久保存 (这是由前两个特点自然得出的)
如果一份文件十分冷门,这个文件可能会从IPFS消失。
IPFS自身并不储存文件,上传至IPFS的文件实际上是被分块保存在节点上。刚上传时,文 件会被分块保存在当前节点上(也就是运行IPFS进程的主机),当有其他节点请求并下载 这个文件后,这个文件会被这些节点缓存。如果一份文件十分冷门,导致所有节点缓存的 数据块拼在一起也无法重建完整文件时,这个文件也就从IPFS系统里消失了。
如何上传文件到IPFS
IPFS和Filecoin是有区别的,IPFS是一个免费的全球文件系统,拿迅雷下载器做例子,你运行了迅雷,就成为了全球p2p的一个节点,你从别人那下载东西,别人也从你这下载东西,只是可能慢点,不稳定一点。 Filecoin相当于收费版的迅雷,内建了代币激励机制,提供好的带宽和存储获得代币,下载文件需付出代币,有了激励,就有人提供更好的服务,这个文件系统就会更加的快和稳定。
如何上传文件到IPFS呢,我试验了一下,以Windows为例,步骤如下:
1、到这下载IPFS执行程序,并解压缩到一个文件夹里,比如d:\ipfs
https://dist.ipfs.io/#go-ipfs
2、 打开cmd命令行,执行两个命令
初始化:ipfs init
运行节点:ipfs daemon
3、上传与下载文件,有两种方式
1)web方式,用浏览器打开下面的网址,然后就可以上传,下载自己的文件了
http://localhost:5001/webui
2)cmd命令行方式
因为原来的cmd窗口运行IPFS节点了,需要新打开一个cmd窗口,
上传文件 d:\ipfs add filename.txt 会得到一个hash值
现在的web界面用户体验不太好,只能上传单个文件,文件上传以后,文件列表里会增加一个哈希值,也没后缀名,文件多了以后恐怕很难找得到。
可以在本地建立一个目录,把想上传的文件放到这个目录里,然后用cmd命令将目录整体上传,这个目录会得到一个哈希值,目录里面的文件就可以直接用文件名了。
比如我建了一个目录叫做 my, 里面放了一个图片go.jpg,执行下列命令上传整个目录,
D:\ipfs>ipfs add -r my
4。得到你的文件的网址
文件上传以后会得到一个哈希值,访问你的文件的网址如下,
https://ipfs.io/ipfs/哈希值
目录上传以后也会得到一个哈希值,访问你的目录里的文件网址如下,
https://ipfs.io/ipfs/哈希值/文件名
比如我上传的go.jpg文件的网址就是,
https://ipfs.io/ipfs/QmdQaC35hfGe2Xt6LxteUQLGsMXkxsW7pF4hgat9UndTko/go.jpg
如果往目录添加或修改了目录里的文件,此时目录的Hash值会变化,用户需要使用新的ID才能访问更新后的目录或文件。这对于网站部署来说是十分不便的,为了解决这个问题IPFS提供了IPNS服务,可以将一个唯一ID绑定到IPFS的Hash上。通过这个唯一ID访问IPFS文件/文件夹。
使用ipfs name publish 目录hash值 命令进行绑定操作. 返回哈希值。
其中的Qm…就是上传目录时返回的Hash值。返回的k2…就是IPNS ID,对于同一个节点来说默认情况下是相同的。我们可使用这个ID生成新的访问链接:
https://ipfs.io/ipns/k2k4r8osxpzc36zwtdx18jgo1ovo3djhbne0y4tqh1ndgxollubumapu
文件是直接支持输入ipfs网址显示内容的,这真是很方便。
最后需要提醒大家的是,文件上传以后就永久存在了,所以上传之前三思而后行。