打包有关内容的文件名与目录信息

目标

通过本教程,你将会学到

  • 添加一个文件到 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 中的内容。

奖励步骤

可以尝试做一些事:

  1. 创建一个有多个文件的目录,告诉 ipfs 递归添加目录及其所有文件。
  2. 创建两个内容相同的不同文件。使用 ipfs add -w 命令添加到 ipfs 中,并确认当构建目录和文件名信息时,ipfs 将重新使用该内容的 hash。

说明

当你添加唯一一个上文件到你的 ipfs 仓库时,ipfs 计算加密 文件内容的 hash 并返回 hash 给你。之后你可以通过 hash 查看 文件的内容和读取他们返回 ipfs 仓库。

为了保持像文件名与路径的追踪,ipfs 允许你将目录和文件信息包装在已添加的文件内容周围。目录与文件名信息有它自己的 hash。这使得可以使用 hash,文件名与目录名称的 "ipfs 路径" 从 ipfs 存储库检索内容。

下一步

results matching ""

    No results matching ""