arm中的.a文件如何产生的_可变文件系统:如何在IPFS中处理文件?
IPFS或星際文件系統(tǒng)是一種點(diǎn)對點(diǎn)(P2P)網(wǎng)絡(luò)協(xié)議,用于共享分布式Web上的數(shù)據(jù)。顧名思義,您可以將IPFS視為文件系統(tǒng),它具有一些獨(dú)特的特性,使其成為安全,分散式共享的理想選擇。
在這里您可以了解所有有關(guān)去中心化網(wǎng)絡(luò)以及如何與您習(xí)慣的網(wǎng)絡(luò)進(jìn)行比較的信息。在這里,您將學(xué)到有關(guān)內(nèi)容尋址,加密哈希,內(nèi)容標(biāo)識符(CID)以及與對等方共享的所有知識,以充分利用本教程有關(guān)IPFS的所有知識。
在IPFS中存儲和共享數(shù)據(jù)
將內(nèi)容添加到IPFS網(wǎng)絡(luò)后,它會存放在哪里?
作為對等數(shù)據(jù)存儲系統(tǒng),IPFS允許每個用戶(對等)在本地托管他們想要的任何數(shù)據(jù)。首次向IPFS添加新內(nèi)容時,實(shí)際上只是在您自己的計(jì)算機(jī)上以適合于通過IPFS協(xié)議共享的格式對其進(jìn)行設(shè)置。通常,您會在自己的計(jì)算機(jī)上安裝IPFS,然后在該計(jì)算機(jī)上創(chuàng)建IPFS的新實(shí)例(也稱為節(jié)點(diǎn))。這就是您的數(shù)據(jù)在本地存儲的地方,由內(nèi)容地址(CID)引用。IPFS中存儲的數(shù)據(jù)可以采用多種形式,但是最常見的用例之一是傳統(tǒng)文件的共享,我們將在本教程中詳細(xì)了解。
您可以選擇在建立網(wǎng)絡(luò)連接后與對等方共享數(shù)據(jù)或文件,但是如果您是唯一托管特定資源的人,則當(dāng)您的計(jì)算機(jī)脫機(jī)時,對等方將無法使用它。使多個同位體托管相同的文件可以使它們更容易使用,而使用CID(通過加密哈希算法創(chuàng)建的唯一內(nèi)容標(biāo)識符)則可以確保該系統(tǒng)的安全。在以后的教程中,我們將討論更多有關(guān)共享的內(nèi)容,但現(xiàn)在,我們將重點(diǎn)介紹如何在自己的IPFS實(shí)例中使用文件。
可變文件系統(tǒng)
由于IPFS中的文件是內(nèi)容尋址的并且是不可變的,因此您無法編輯文件。相反,每次更改都會創(chuàng)建一個新文件。該可變的文件系統(tǒng)(MFS)是內(nèi)置到IPFS一個工具,可以讓你把文件,就像你通常會在一個基于名稱的文件系統(tǒng)-你可以添加,刪除,移動和編輯MFS文件,并有更新鏈接的一切工作,哈希為您照顧。它是一種抽象,可讓您像處理可變數(shù)據(jù)一樣處理它們。
通過Files IPFS CLI(命令行界面)和API中的命令訪問MFS 。在本教程中,我們將探索Files API。
如果您以前從命令行使用過文件和目錄,那么許多MFS方法將看起來非常熟悉!
讓我們開始探索如何在IPFS中處理文件!
01
檢查目錄狀態(tài)
在我們的ProtoSchool教程中,每次您單擊課程中的“提交”按鈕時,我們都會在瀏覽器中為您創(chuàng)建一個新的IPFS節(jié)點(diǎn)。每當(dāng)您ipfs.someMethod()在我們的課程中看到ipfs該變量時,它都是一個變量,它引用您的IPFS實(shí)例,也稱為節(jié)點(diǎn)。您執(zhí)行的操作僅影響您自己的IPFS節(jié)點(diǎn),而不影響屬于對等節(jié)點(diǎn)的節(jié)點(diǎn)。
我們正在幕后創(chuàng)建IPFS節(jié)點(diǎn),因此您可以專注于本課的內(nèi)容,但是最終,您需要通過在終端中安裝IPFS和運(yùn)行守護(hù)程序來學(xué)習(xí)在本地托管自己的節(jié)點(diǎn)。準(zhǔn)備進(jìn)行實(shí)驗(yàn)時,可以在我們的文檔中找到有關(guān)安裝IPFS和初始化節(jié)點(diǎn)的說明。
如前所述,與Mutable File System相關(guān)聯(lián)的方法是Files API的一部分,因此它們將采用的格式ipfs.files.someMethod()。讓我們看一個甚至可以在將任何文件添加到IPFS節(jié)點(diǎn)之前就可以開始使用的簡單方法。
02
探索您的IPFS節(jié)點(diǎn)
在使用IPFS節(jié)點(diǎn)時,您通常需要檢查文件或目錄的狀態(tài)。您可以使用進(jìn)行此操作ipfs.files.stat,并傳遞您要檢查的路徑。
例如,要檢查stuff位于我們的根目錄(/)中的目錄的狀態(tài),我們可以像這樣調(diào)用方法:
await ipfs.files.stat('/stuff')
此方法返回一個對象,其中包含有關(guān)文件或目錄的一些基本數(shù)據(jù):
cid(CID對象)
大小(一個整數(shù),以字節(jié)為單位的文件或目錄大小)
累積大小(一個整數(shù),該整數(shù)與組成文件的DAGNodes的大小(以字節(jié)為單位))
類型(可以是directory的字符串file)
塊(如果type為directory,則為目錄中的文件數(shù);如果type為file,則為構(gòu)成文件的塊數(shù))
withLocality(一個布爾值,指示是否存在位置信息)
本地(布爾值,表示所查詢的dag是否在本地完全存在)
sizeLocal(一個整數(shù),指示本地存在的數(shù)據(jù)的累積大小)
知道了!該size目錄始終是0,不管有多少條目中包含的,因?yàn)槟夸浧鋵?shí)只是一組鏈接到其他文件和目錄。目錄的cumulativeSize,相反,改變?yōu)槟夸浿械膬?nèi)容變化。它不僅代表該目錄中所有條目的文件大小,還代表描述這些條目的元數(shù)據(jù):類型,塊大小等。
重要的是要注意,stat即使您還沒有任何IPFS節(jié)點(diǎn),也可以。即使是空節(jié)點(diǎn)也具有CID。
03
在ProtoSchool中處理文件
為了安全起見,網(wǎng)絡(luò)瀏覽器不允許我們直接更改計(jì)算機(jī)文件系統(tǒng)中的文件。因此,您需要將一個或多個文件上傳到瀏覽器中,以便在本教程中使用。
在每個挑戰(zhàn)中,您都會看到可以通過拖放或從文件資源管理器中選擇文件來從計(jì)算機(jī)上載文件。如果仔細(xì)查看run代碼編輯器中的函數(shù),您會發(fā)現(xiàn)它現(xiàn)在帶有一個參數(shù)files。當(dāng)您從計(jì)算機(jī)上載文件時,我們將確保將它們作為files數(shù)組傳遞到函數(shù)中。只要您不刷新瀏覽器,這些文件就可以在本教程的下一課中訪問,但是您還可以選擇上載不同的文件以用于每節(jié)課。
為了練習(xí),讓我們從您的計(jì)算機(jī)上載一個或多個文件,并查看瀏覽器作為files數(shù)組接收到的內(nèi)容。
04
將文件添加到MFS
現(xiàn)在我們有了在瀏覽器中可訪問的文件,讓我們看看如何將它們添加到IPFS。
要將文件添加到IPFS,我們可以使用MFS files.write方法,如下所示:
await ipfs.files.write(path, content, [options])
MFS files.write方法可以接受的文件content在一個形式緩沖器,ReadableStream,PullStream,斑點(diǎn)(僅在瀏覽器中),或串路徑到一個文件(僅在Node.js的)。由于瀏覽器中的文件對象是一種Blob,因此我們很高興!
盡管瀏覽器中的文件對象碰巧知道自己的文件名,但Blob通常并不知道,因此IPFS無法直接確定現(xiàn)有文件名。我們必須在其中提供所需的文件名path。
該path是你在你的IPFS實(shí)例中創(chuàng)建,包括所需的文件名的新路徑。(請注意,這是我們正在描述的目標(biāo)路徑,而不是文件已在您的計(jì)算機(jī)上駐留的路徑。)
MFS files.write方法,就像您可能在自己的計(jì)算機(jī)上使用過的類似方法一樣,實(shí)際上是為編輯現(xiàn)有文件的內(nèi)容而構(gòu)建的。但是,我們還可以通過提供boolean選項(xiàng){ create: true }來使用它來創(chuàng)建一個全新的文件,以指示如果文件在給定路徑中不存在,則應(yīng)在該文件中創(chuàng)建該文件。
因此,如果我們在瀏覽器中有一個文件對象,可以通過一個變量訪問catPic它,并且我們想將其添加到IPFS的根目錄中并命名為cat.jpg,我們可以這樣做:
await ipfs.files.write('/cat.jpg', catPic, { create: true })
如果需要,可以使用串聯(lián)(字符串的連接)來創(chuàng)建相同的路徑。如果文件名是文件對象的屬性,這將很方便,就像在瀏覽器中一樣。
await ipfs.files.write('/' + catPic.name, catPic, { create: true })
請注意,該files.write方法不提供返回值。
稍后,我們將研究如何將文件添加到根目錄以外的目錄。
05
查看目錄的內(nèi)容
當(dāng)我們使用將文件添加到MFS時files.write,該方法沒有返回任何值,但是我們?nèi)匀豢梢赃M(jìn)行檢查以確保一切都按預(yù)期進(jìn)行。
在可變文件系統(tǒng)中,我們可以使用files.ls 方法檢查目錄。如果您曾經(jīng)使用命令行列出計(jì)算機(jī)上目錄的內(nèi)容,應(yīng)該會感到非常熟悉。
該files.ls方法如下所示:
ipfs.files.ls([path], [options])
該方法默認(rèn)將列出根目錄(/)的內(nèi)容,或者您可以選擇指定path要檢查的特定目錄(例如)/catPics,
files.ls 產(chǎn)生一個對象數(shù)組,該對象數(shù)組針對您要檢查的目錄中包含的每個文件或目錄,具有以下屬性:
name:文件名
type:對象的類型(0-文件或1-目錄)
size:文件大小(以字節(jié)為單位)
cid:內(nèi)容標(biāo)識符(CID),用于在IPFS中標(biāo)識您的文件
mode:作為數(shù)字的UnixFS模式
mtime:具有數(shù)字secs和nsecs屬性的對象
如果我們想檢查/catPics 目錄的內(nèi)容,可以這樣做:
ipfs.files.ls('/catPics')
由于該files.ls方法返回一個Async Iterable,因此只能一個一個地迭代這些值。如果需要返回所有值,則可以將每個值保存到一個數(shù)組中,然后返回該數(shù)組。
要遍歷所有值,我們可以使用for await...of循環(huán):
const result = []for await (const resultPart of ipfs.files.ls('/catPics')) {
result.push(resultPart)
}return result
為了使事情變得簡單,我們可以使用it-all自動執(zhí)行此操作的軟件包:
// the all function comes from the it-all package// and is made globally available (just like ipfs) in our code challengesconst result = await all(ipfs.files.ls('/catPics'))
本次內(nèi)容就到此結(jié)束了,如若想要了解更多有關(guān)IPFS的內(nèi)容請關(guān)注我們的公眾號,我們將持續(xù)更新關(guān)于IPFS的內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的arm中的.a文件如何产生的_可变文件系统:如何在IPFS中处理文件?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是金融安全 是金融经济学研究的基本问
- 下一篇: 系统 销售订单号_销售单,进货单自动计算