添加内容到 IPFS 并检索它
目标
学完这节课之后你可以:
- 添加文件内容到 IPFS
- 用文件 hash 从 IPFS 中读取文件内容
- 解释 IPFS hash 与你已经添加的内容之间的关系
步骤
第一步:创建一个你将要添加到 IPFS 上的文件
在 IPFS 上你可以任何类型的内容。这节课我们将添加一些文本内容到
.txt
文件,但在这个过程中你可以用其它任意内容与文件来做。
为这个例子创建一个新的文件夹。
$ cd ~/Desktop
$ mkdir ipfs-tutorial
$ cd ipfs-tutorial
现在,创建一个名为 mytextfile.txt
在其中写入 "version 1 of my text"。使用下面这种简单的方式,一行命令搞定:
$ echo "version 1 of my text" > mytextfile.txt
你可以使用这个命令读取文件中的内容:
$ cat mytextfile.txt
version 1 of my text
第二步:添加文件到 IPFS
$ ipfs add mytextfile.txt
added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy mytextfile.txt
保存 ipfs 返回的 hash。这是文件文件内容的加密 hash。如果文件的内容改变,hash 将会改变,但如果文件的内容不变,hash 总是一样的。
第三步: 从 IPFS 中读取文件
就像常规的 cat
一样,我们可以用 ipfs cat
来查看已经添加到 ipfs 中文件的内容
使用 ipfs cat [hash]
可以查询已经添加到 ipfs 中的内容使用, 这个 hash 是上一步 ipfs add
命令时返回的 hash。
注意,现在得到的是文件的内容,而不是文件本身,这是因为这是文件内容的 hash 而不是文件的,下一步我们会解释。
第四步,验证 hash 指向的文件内容,而不是文件
当我们用 ipfs cat
读取的是文件的内容,而不是文件本身。这是因为 hash 值是由文件内容生成的。我们可以通过 ipfs add
直接添加文本到 ipfs,而不是通过文件。生成的 hash 应该跟你添加到文件中的内容得到的是一样的。如果你要做三重验证可以通过下面的方式进行
$ ipfs add mytextfile.txt
added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy mytextfile.txt
$ echo "version 1 of my text" | ipfs add
added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy
$ cat mytextfile.txt | ipfs add
added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy
只要保证内容相同,生成的 hash 就会是一样的。就 IPFS 被连接,内容是相同的。
第五步: 修改内容得到一个不同的 hash
现在把 "version 2 of my text" 添加到 ipfs。你会得到一个不同的 hash。
前一步已经证实了,你可以添加新的文本到 IPFS 或者你可以修改 mytextfile.txt 并把它添加到 IPFS。不论哪种方式你都可以得到一个相同的 hash。
$ echo "version 2 of my text" | ipfs add
added QmTudJSaoKxtbEnTddJ9vh8hbN84ZLVvD5pNpUaSbxwGoa QmTudJSaoKxtbEnTddJ9vh8hbN84ZLVvD5pNpUaSbxwGoa
第五步:将 IPFS 中的内容写入文件
你可以从 ipfs 中读取任意版本的内容,也可以将内容写入文件。例如,你将 mytextfile.txt 文件中的内容从 "version 1" 切换到 "version 2",你想重复多少次都可以:
$ ipfs cat QmTudJSaoKxtbEnTddJ9vh8hbN84ZLVvD5pNpUaSbxwGoa > mytextfile.txt
$ cat mytextfile.txt
version 2 of my text
$ ipfs cat QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy > mytextfile.txt
$ cat mytextfile.txt
version 1 of my text
你也可以将 ipfs 文件中的内容写入一个新的文件
$ ipfs cat QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy > anothertextfile.txt
$ cat anothertextfile.txt
version 1 of my text
说明
IPFS 是基于内容的 hash 询址的。这个 hash 是由内容生成的唯一身份。只要内容保持不变, hash 值就不会变, 但如果内容改变了你将会得到不同的 hash。
如果你想有两个不同的文件包含相同的内容, IPFS 将通过内容的 hash 询址。文件名是不同的,但内容是相同的,所以内容的 hash 也是相同的。
这就是开始的问题: IPFS 怎样追踪文件名?这是下环节要讲的内容。