IPFS操作教程3: 将文件内容添加到本地IPFS存储库中,并对它进行读取
Online
2019-10-22
热度5706

IPFS操作教程3: 将文件内容添加到本地IPFS存储库中,并对它进行读取

IPFS操作教程3: 将文件内容添加到本地IPFS存储库中,并对它进行读取

教程目标

通过本小节的学习,你会:

  • 将文件里的内容添加到本地IPFS存储库中
  • 使用hash值检索到对应的数据
  • 明白IPFS的hash值和你上传文件内容的关系

学习步骤

第一步: 创建你要添加的文件

你可以上传任何类型的内容到IPFS。本教程我们使用的后缀为“.txt”的文件,但是你可以替换成其他任何文件类型,当然操作的步骤都是一样的。

我们在桌面上创建一个文件夹,命令如下:

$ cd ~/Desktop
$ mkdir ipfs-tutorial
$ cd ipfs-tutorial

然后在ipfs-tutorial目录下,创建一个mytextfile.txt文件,内容是“chaindesk is a good service Community”。在终端用命令很容易的就能创建这个文件,命令如下:

echo "chaindesk is a good IT service Community" > mytextfile.txt

使用cat命令,查看文件的信息,命令如下:

$ cat mytextfile.txt
chaindesk is a good IT service Community

第二步:添加文件内容到本地IPFS存储库

命令很简单,ipfs add 文件名,操作和显示如下:

$ ipfs add mytextfile.txt 

added QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF mytextfile.txt
 41 B / 41 B [=========================================================] 100.00%

保存QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF。这个很长的字符串就是文件内容加密后的hash值。如果文件内容发生变化,那么这个hash值也会变,但是文件内容一样,返回的hash值都是一样的。

第三步:从本地IPFS存储库中读取内容

读取的命令很简单,和普通的cat命令类似,只不过这里用的是ipfs cat。而且cat后边跟的是hash值,而不是文件名。命令如下:

$ ipfs cat QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF

chaindesk is a good IT service Community

需要注意的是执行ipfs add命令后返回的hash值,与文件名没有关系,只和文件里面的内容有关联。

第四步:确认:IPFS的hash指向的是文件内容,而不是文件本身

当我们使用ipfs cat命令时,返回的是文件的内容,而不是文件本身。这是因为hashQmWKGV...是文件内容的hash值。我们可以测试一下,直接将内容上传到IPFS,看下效果,命令如下:

$ echo "chaindesk is a good IT service Community" | ipfs add

added QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF

你会发现,返回的hash和之前上传mytextfile.txt文件返回的hash值一样。

你可以在保证文件内容一致的情况下,不断更改文件名字,然后上传到IPFS,最终返回的hash值都是一样的。自己感兴趣的,可以测试下。

第五步:修改文件的内容,将会得到不一样的hash值

更改文件mytextfile.txt里的内容,并再次上传到IPFS,将会返回不同的hash值,命令如下:

$ vi  mytextfile.txt
$ ipfs add  mytextfile.txt
added QmWjoU6Nm3ofbiZWsZrX898uCTFEdgJJijv2CfL5dJ5C6o mytextfile.txt

注:vi是打开并编辑文件内容。我在内容chaindesk前边加了个The,这样文件就发生变化了,然后按esc,输入:wq,退出保存。

从结果上看,返回的hash和之前的完全不一样。

第六步:从本地IPFS存储库读取内容,并使用pipe将其处理成一个文件

我们可以通过ipfs cat+hash从IPFS读取hash对应的内容,并指定将内容存储到某个文件中。我们已经有了一个文件,即mytextfile.txt。接下来就使用这个文件来存储读取到的内容,命令如下:

$ ipfs cat QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF > mytextfile.txt
$ cat mytextfile.txt 
chaindesk is a good IT service Community
$ ipfs cat QmWjoU6Nm3ofbiZWsZrX898uCTFEdgJJijv2CfL5dJ5C6o > mytextfile.txt
$ cat mytextfile.txt 
The chaindesk is a good IT service Community

当然你也可以创建新的文件,来存储内容:

$ ipfs cat QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF > new

注解

IPFS根据其加密hash跟踪内容。此hash唯一地标识了内容。只要内容保持不变,hash值就保持不变,但是如果内容发生变化,您将得到不同的hash值。

如果有两个包含相同内容的不同文件,IPFS将使用一个hash跟踪该内容。文件名是不同的,但内容是相同的,所以内容的hash值是相同的。

那么将会引出一个问题:怎么才能让IPFS跟踪文件名?这将是下一教程的主题。

本内容旨在传递行业动态,不构成投资建议或承诺。
为你推荐

商务合作:TG:@Lottie96