

IPFS操作教程3: 将文件内容添加到本地IPFS存储库中,并对它进行读取
通过本小节的学习,你会:
你可以上传任何类型的内容到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 add 文件名,操作和显示如下:
$ ipfs add mytextfile.txt
added QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF mytextfile.txt
41 B / 41 B [=========================================================] 100.00%保存QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF。这个很长的字符串就是文件内容加密后的hash值。如果文件内容发生变化,那么这个hash值也会变,但是文件内容一样,返回的hash值都是一样的。
读取的命令很简单,和普通的cat命令类似,只不过这里用的是ipfs cat。而且cat后边跟的是hash值,而不是文件名。命令如下:
$ ipfs cat QmWKGV27xJZdZ9DzpFZMrU2RyFuVE6XEhUHRU7HMhvApYF
chaindesk is a good IT service Community
需要注意的是执行ipfs add命令后返回的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值都是一样的。自己感兴趣的,可以测试下。
更改文件mytextfile.txt里的内容,并再次上传到IPFS,将会返回不同的hash值,命令如下:
$ vi mytextfile.txt
$ ipfs add mytextfile.txt
added QmWjoU6Nm3ofbiZWsZrX898uCTFEdgJJijv2CfL5dJ5C6o mytextfile.txt注:vi是打开并编辑文件内容。我在内容chaindesk前边加了个The,这样文件就发生变化了,然后按esc,输入:wq,退出保存。
从结果上看,返回的hash和之前的完全不一样。
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 > newIPFS根据其加密hash跟踪内容。此hash唯一地标识了内容。只要内容保持不变,hash值就保持不变,但是如果内容发生变化,您将得到不同的hash值。
如果有两个包含相同内容的不同文件,IPFS将使用一个hash跟踪该内容。文件名是不同的,但内容是相同的,所以内容的hash值是相同的。
那么将会引出一个问题:怎么才能让IPFS跟踪文件名?这将是下一教程的主题。