打包有关内容的文件名与目录信息
目标
通过本教程,你将会学到
- 添加一个文件到 IPFS, 包括文件名,权限等等
- 在 IPFS 中添加文件夹
- 解释 IPFS 怎样表示两个内容相同的文件
- 使用包含文件的目录的 hash,从 IPFS 中读取内容
步骤
第一步:创建一个你准备添加的文件
在之前的教程中你可以已经有了这个文件。如果你已经做过,确保文件内容匹配。否则 你不能匹配本教程例子中的 hash。
创建一个名为 mytextfile.txt
写入内容 "version 1 of my text"。下面的命令是一种简单的方式:
$ echo "version 1 of my text" > mytextfile.txt
第二步:添加文件到 IPFS
$ ipfs add -w mytextfile.txt
added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy mytextfile.txt
added QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w
在之前的教程中我们运行 ipfs add mytextfile.txt
并没有带 -w
参数,ipfs 只返回一个 hash。这次它返回两个 hash。第一个 hash 与之前相同 -- 它是文件内容的 hash。第二个 hash 是 ipfs 围绕我们的内容 "包括" 目录 hash 与文件名称信息的 hash。
在下一节,像之前一样,我们将用 ipfs 命令查看文件名称和文件名称和信息。
第三步: 列出目录信息
-w
参数告诉 ipfs 包括目录和文件名信息与内容 -- 它 "将文件包装在一个目录中"。关于此更多的信息,运行 ipfs add --help
有更多的描述。
对于 目录与文件名信息的列表,用 ipfs ls
。我们将用 -v
参数来包括头信息。关于这个命令想了解更多,请运行 ipfs ls --help
$ ipfs ls -v QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w
Hash Size Name
QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy 29 mytextfile.txt
这个命令 ipfs ls QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w
列出目录中文件的的 hash QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy
这个响应展示出目录中包括一个文件 -- "mytextfile.txt" -- 文件的 hash 是 QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy
注意 我们必须用
ipfs ls
代替ipfs cat
来读取这个信息,因为它是一个目录。如果你想尝试用ipfs cat
读取目录,你将会得到一个错误:$ ipfs cat QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w Error: this dag node is a directory
第四步:用父目录的 hash 读取文件内容
我们能用 目录的 hash 来读取文件的内容:
$ ipfs cat QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w/mytextfile.txt
version 1 of my text
这个命令转化目录 hash 为 QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w
中的 mytextfile.txt
中的内容。
奖励步骤
可以尝试做一些事:
- 创建一个有多个文件的目录,告诉 ipfs 递归添加目录及其所有文件。
- 创建两个内容相同的不同文件。使用
ipfs add -w
命令添加到 ipfs 中,并确认当构建目录和文件名信息时,ipfs 将重新使用该内容的 hash。
说明
当你添加唯一一个上文件到你的 ipfs 仓库时,ipfs 计算加密 文件内容的 hash 并返回 hash 给你。之后你可以通过 hash 查看 文件的内容和读取他们返回 ipfs 仓库。
为了保持像文件名与路径的追踪,ipfs 允许你将目录和文件信息包装在已添加的文件内容周围。目录与文件名信息有它自己的 hash。这使得可以使用 hash,文件名与目录名称的 "ipfs 路径" 从 ipfs 存储库检索内容。