IPFS:可变文件系统(一)

可变文件系统(MFS)使您可以像处理传统的基于名称的文件系统一样使用文件和目录。

IPFS简介

IPFS:星际文件系统

IPFS ,星际文件系统是一种点对点(P2P)网络协议,用于共享分布式 Web 上的数据。顾名思义,您可以将 IPFS 视为文件系统,它具有一些独特的特性,使其成为安全,分散式共享的理想选择。

在这里您可以了解所有有关去中心化网络以及如何与您习惯的网络进行比较的信息。在这里,您将学到有关内容寻址,加密哈希,内容标识符(CID)以及与对等方共享的所有知识。

在 IPFS 中存储和共享数据

将内容添加到 IPFS 网络后,它会存放在哪里?

作为对等数据存储系统,IPFS 允许每个用户(对等)在本地托管他们想要的任何数据。首次向 IPFS 添加新内容时,实际上只是在您自己的计算机上以适合于通过 IPFS 协议共享的格式对其进行设置。通常,您会在自己的计算机上安装 IPFS,然后在该计算机上创建 IPFS 的新实例(也称为节点)。这就是您的数据在本地存储的地方,由内容地址(CID)引用。IPFS 中存储的数据可以采用多种形式,但是最常见的用例之一是传统文件的共享。

您可以选择在建立网络连接后与对等方共享数据或文件,但是如果您是唯一托管特定资源的人,则当您的计算机脱机时,对等方将无法使用它。使多个同位体托管相同的文件可以使它们更容易使用,而使用 CID(通过加密哈希算法创建的唯一内容标识符)则可以确保该系统的安全。在以后的教程中,我们将讨论更多有关共享的内容,但现在,我们将重点介绍如何在自己的 IPFS 实例中使用文件。

可变文件系统

由于 IPFS 中的文件是内容寻址的并且是不可变的,因此您无法编辑文件。相反,每次更改都会创建一个新文件。该可变的文件系统(MFS)是内置到 IPFS 一个工具,可以让你把文件,就像你通常会在一个基于名称的文件系统-你可以添加,删除,移动和编辑 MFS 文件,并有更新链接的一切工作,哈希为您照顾。它是一种抽象,可让您像处理可变数据一样处理它们。

通过 filesIPFS CLI(命令行界面)和 API 中的命令访问 MFS 。

如果您以前从命令行使用过文件和目录,那么许多 MFS 方法将看起来非常熟悉!

让我们开始探索如何在 IPFS 中处理文件!

检查目录状态

处理文件

在我们的文章中,每次您单击文章中的“提交”按钮时,我们都会在浏览器中为您创建一个新的 IPFS 节点。每当您 ipfs.someMethod() 在我们的文章中看到 ipfs 该变量时,它都是一个变量,它引用您的 IPFS 实例,也称为节点。您执行的操作仅影响您自己的 IPFS 节点,而不影响属于对等节点的节点。

我们正在幕后创建 IPFS 节点,因此您可以专注于本文的内容,但是最终,您需要通过在终端中安装 IPFS 和运行守护程序来学习在本地托管自己的节点。准备进行实验时,可以在我们的文档中找到有关安装 IPFS 和初始化节点的说明。

如前所述,与 Mutable File System 相关联的方法是 Files API 的一部分,因此它们将采用的格式 ipfs.files.someMethod()。让我们看一个甚至可以在将任何文件添加到 IPFS 节点之前就可以开始使用的简单方法。

探索您的 IPFS 节点 ipfs.files.stat

在使用 IPFS 节点时,您通常需要检查文件或目录的状态。您可以使用进行此操作 ipfs.files.stat,并传递您要检查的路径。

例如,要检查 stuff 位于我们的根目录(/)中的目录的状态,我们可以像这样调用方法:

await ipfs.files.stat('/stuff')

此方法返回一个对象,其中包含有关文件或目录的一些基本数据:

  • 哈希(带有加密哈希的字符串)

  • 大小(一个整数,以字节为单位的文件或目录大小)

  • 累积大小(一个整数,该整数与组成文件的 DAGNodes 的大小(以字节为单位))

  • 类型(可以是目录或文件的字符串)

  • (如果 type 为 directory,则为目录中的文件数;如果 type为file,则为构成文件的块数)

  • withLocality(一个布尔值,指示是否存在位置信息)

  • 本地(布尔值,表示所查询的 dag 是否在本地完全存在)

  • sizeLocal(一个整数,指示本地存在的数据的累积大小)

目录的大小总是 0,不管它包含多少条目,因为目录实际上只是指向其他文件和目录的一组链接。相反,目录的累积大小随着目录内容的变化而变化。它不仅表示该目录中所有条目的文件大小,还表示描述这些条目的元数据:类型、块大小等等。

需要注意的是,即使您的 IPFS 节点中还没有任何内容,也可以对其进行统计。即使是空节点也有 CID(散列)。

我们已帮助您找到官方给出的文件,您可以进行操作体验,网址:

IPFS:可变文件系统(一)

如何处理文件

为了安全起见,网络浏览器不允许我们直接更改计算机文件系统中的文件。因此,您需要将一个或多个文件上传到浏览器中,以便在本文章中了解。

在每个练习中,您都会看到可以从计算机上载文件,方法是拖放或从文件浏览器中选择文件。如果仔细查看 run 代码编辑器中的函数,您会发现它现在带有一个参数 files。当您从计算机上载文件时,我们将确保将它们作为 files 数组传递到函数中。只要您不刷新浏览器,这些文件就可以在本教程的下一 课中访问,但是您还可以选择上载不同的文件以用于每节课。

为了练习,让我们从您的计算机上载一个或多个文件,并查看浏览器作为 files 数组接收到的内容。

我们已帮助您找到官方给出的文件,您可以进行操作体验,网址:

IPFS:可变文件系统(一)

将文件添加到MFS

现在我们有了在浏览器中可访问的文件,让我们看看如何将它们添加到 IPFS。

要将文件添加到 IPFS,我们可以使用 MFS files.write 方法,如下所示:

await ipfs.files.write(path, content, [options])

MFS files.write 方法可以接受的文件 content 在一个形式缓冲器,ReadableStream,PullStream,斑点(仅在浏览器中),或串路径到一个文件(仅在 Node.js 的)。由于浏览器中的文件对象是一种 Blob,因此我们很高兴!

尽管浏览器中的文件对象碰巧知道自己的文件名,但 Blob 通常并不知道,因此 IPFS 无法直接确定现有文件名。我们必须在中提供所需的文件名 path。

该路径是您希望在 IPFS 实例中创建的新路径,包括所需的文件名。(注意,我们描述的是目标路径,而不是文件已经驻留在计算机上的路径。)

MFS files.write 方法,就像您可能在自己的计算机上使用过的类似方法一样,实际上是为编辑现有文件的内容而构建的。但是,我们还可以通过提供 boolean 选项{ create: true }来使用它来创建一个全新的文件,以指示如果文件在给定路径中不存在,则应在该文件中创建该文件。

因此,如果我们在浏览器中有一个文件对象,可以通过一个变量访问 catPic 它,并且我们想将其添加到 IPFS 的根目录中并命名为 cat.jpg,我们可以这样做:

await ipfs.files.write('/cat.jpg', catPic, { create: true })

如果需要,可以使用串联(字符串的连接)来创建相同的路径。如果文件名是文件对象的属性,这将很方便,就像在浏览器中一样。

await ipfs.files.write('/' + catPic.name, catPic, { create: true })

请注意,该 files.write 方法不提供返回值。

稍后,我们将研究如何将文件添加到根目录以外的目录。

我们已帮助您找到官方给出的文件,您可以进行操作体验,网址:

IPFS:可变文件系统(一)

查看目录的内容

当我们使用将文件添加到 MFS 时 files.write,该方法没有返回任何值,但是我们仍然可以进行检查以确保一切都按预期进行。

在可变文件系统中,我们可以使用 files.ls 方法检查目录。如果您曾经使用命令行列出计算机上目录的内容,应该会感到非常熟悉。

该 file.ls 方法如下所示:

await ipfs.files.ls([path], [options])

该方法默认将列出根目录(/)的内容,或者您可以选择指定 path 要检查的特定目录(例如)/catPics,

file.ls 产生一个对象数组,该对象数组针对您要检查的目录中包含的每个文件或目录,具有以下属性:

  • name (默认):文件名

  • type(可选{ long: true }):对象的类型(0-文件或1-目录)

  • size(可选{ long: true }):文件大小(以字节为单位)

  • hash(带有可选{ long: true }):加密哈希或内容标识符(CID),它代表 IPFS 中的文件

要返回所有这些属性的值,必须使用 option { long: true }。否则,name 将显示除字段以外的所有属性,但它们的值将以 0(for size和type)或""(for hash)返回。

如果我们想查看/catPics 目录内容的所有可用详细信息,可以这样做:

await ipfs.files.ls('/catPics', { long: true })

您可以在 files.lsAPI 文档中了解有关其他选项的更多信息。

我们已帮助您找到官方给出的文件,您可以进行操作体验,网址:

IPFS:可变文件系统(一)

了解CID如何随着数据变化而变化

正如您在“分散式数据结构”文章中了解到的那样,CID(内容标识符)通过加密哈希与它们表示的内容唯一匹配。具有相同内容的两个文件具有相同的 CID(哈希),并且即使它们之间差异最小的两个文件也具有不同的 CID。目录也是如此。每次更新文件或目录的内容时,其CID 都会更改。

当您的根目录为空并且使用来检查其状态时 ipfs.files.stat,您会看到以下结果:

{
"hash": "QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn",
"size": 0,
"cumulativeSize": 4,
"blocks": 0,
"type": "directory",
"withLocality": false
}

现在,您已经向其中添加了一个或多个文件,看起来像什么?现在应该更改哪些字段?

我们已帮助您找到官方给出的文件,您可以进行操作体验,网址:

IPFS:可变文件系统(一)

IPFS:可变文件系统(一)

非常感谢您对 IPFS&Filecoin 项目的持续支持。我们很高兴继续与您一起,为人类信息建立一个强大的,去中心化和高效的基础。

IPFS:可变文件系统(一)

IPFS:可变文件系统(一)

IPFS:可变文件系统(一)

IPFS:可变文件系统(一)

IPFS:可变文件系统(一)

IPFS:可变文件系统(一)

FilCloud 帮你迅速了解 IPFS 领域的热点技术和应用

IPFS:可变文件系统(一)

长按识别二维码关注我们

本文来自,仅作分享,存在异议请联系平台删除。本文观点不代表刺猬财经 - 刺猬区块链资讯站立场。

(0)
上一篇 2019年12月25日 下午6:30
下一篇 2019年12月25日 下午7:39

相关推荐