LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > IPFS:可变文件系统(一)

IPFS:可变文件系统(一)

2019-11-26 FilCloud 来源:区块链网络

IPFS:可变文件系统(一)

一、IPFS简介

IPFS:星际文件系统

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

如果您还没有这样做,我们鼓励您阅读我们的《去中心化数据结构》教程,在这里您可以了解所有有关去中心化网络以及如何与您习惯的网络进行比较的信息。在这里,您将学到有关内容寻址,加密哈希,内容标识符(CID)以及与对等方共享的所有知识,以充分利用本教程有关IPFS的所有知识

在IPFS中存储和共享数据

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

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

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

可变文件系统

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

通过filesIPFS CLI(命令行界面)和API中的命令访问MFS 。在本教程中,我们将探索Files API。

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

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

二、检查目录状态

在ProtoSchool中处理文件

在我们的ProtoSchool教程中,每次您单击课程中的“提交”按钮时,我们都会在浏览器中为您创建一个新的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:可变文件系统(一)

三、在ProtoSchool中处理文件

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

在每个练习中,您都会看到可以从计算机上载文件,方法是拖放或从文件浏览器中选择文件。如果仔细查看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:可变文件系统(一)

—-

编译者/作者:FilCloud

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...