添加内容到 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 怎样追踪文件名?这是下环节要讲的内容。

在 IPFS 的文件夹中添加文件名

results matching ""

    No results matching ""