IPFS:可變文件系統(tǒng)

可變文件系統(tǒng)(MFS)允許您像使用傳統(tǒng)的基于名稱的文件系統(tǒng)一樣,使用文件和目錄至会。

Lesson 1 IPFS簡(jiǎn)介

IPFS: 星際文件系統(tǒng)

IPFS现诀,或著稱為星際文件系統(tǒng),是用于在去中心化網(wǎng)絡(luò)上共享數(shù)據(jù)的對(duì)等(P2P)網(wǎng)絡(luò)協(xié)議知牌。 顧名思義,你可以將IPFS視為文件系統(tǒng)斤程,它具有一些獨(dú)特的特性角寸,使其成為安全的,去中心化共享的理想選擇忿墅。

如果你還沒(méi)有接觸過(guò)扁藕,我們建議你瀏覽我們的去中心化數(shù)據(jù)結(jié)構(gòu)教程,你可以在其中了解去中心化網(wǎng)絡(luò)的所有信息疚脐,以及它與你熟悉的傳統(tǒng)網(wǎng)絡(luò)之間的區(qū)別亿柑。 在那里,你將學(xué)習(xí)有關(guān)內(nèi)容尋址棍弄,加密哈希望薄,內(nèi)容標(biāo)識(shí)符(CID)以及在節(jié)點(diǎn)間共享信息的所有內(nèi)容,為了更好的理解本教程呼畸,所有這些概念都是你需要了解的痕支。

在IPFS中存儲(chǔ)和共享數(shù)據(jù)

當(dāng)內(nèi)容被添加到IPFS網(wǎng)絡(luò)時(shí),內(nèi)容將會(huì)被保存在哪里蛮原?

作為點(diǎn)對(duì)點(diǎn)數(shù)據(jù)存儲(chǔ)系統(tǒng)卧须,IPFS允許每個(gè)用戶(節(jié)點(diǎn))在本地托管任何他們喜歡的數(shù)據(jù)。 當(dāng)你第一次向IPFS添加內(nèi)容時(shí)儒陨,實(shí)際上只是將內(nèi)容通過(guò)IPFS協(xié)議轉(zhuǎn)換成共享格式花嘶,存儲(chǔ)在本地設(shè)備上。 通常蹦漠,我們是在自己的計(jì)算機(jī)上安裝IPFS椭员,并創(chuàng)建一個(gè)新的IPFS實(shí)例(也稱為節(jié)點(diǎn))。 這就是你的數(shù)據(jù)在本地保存的地方笛园,并通過(guò)內(nèi)容標(biāo)識(shí)符(CID)引用拆撼。 存儲(chǔ)在IPFS中的數(shù)據(jù)可以采用多種形式容劳,但最常見(jiàn)的使用場(chǎng)景之一,是對(duì)傳統(tǒng)文件的共享闸度,我們將在本教程中詳細(xì)了解竭贩。

當(dāng)你聯(lián)網(wǎng)時(shí),你可以選擇與其他節(jié)點(diǎn)共享你的數(shù)據(jù)或文件莺禁,但如果你是唯一一個(gè)托管該資源的人留量,則當(dāng)你的計(jì)算機(jī)離線時(shí),其他節(jié)點(diǎn)將無(wú)法使用該資源哟冬。 讓多個(gè)節(jié)點(diǎn)托管相同的文件可使資源更獲得更高的可用性楼熄,并且CID(通過(guò)cryptograhpic哈希創(chuàng)建的唯一內(nèi)容標(biāo)識(shí)符)的使用也保證了系統(tǒng)安全。 我們將在未來(lái)的教程中詳細(xì)討論共享浩峡,但是現(xiàn)在我們將專注于如何在你自己的IPFS實(shí)例中處理文件可岂。

可變文件系統(tǒng)(Mutable File System)

因?yàn)镮PFS中的文件是內(nèi)容尋址并且無(wú)法篡改的,所以你無(wú)法編輯文件; 因此翰灾,每次更改都會(huì)創(chuàng)建一個(gè)新文件缕粹。 可變文件系統(tǒng)(MFS)是一個(gè)內(nèi)置于IPFS中的工具,可以讓你像在基于名稱的文件系統(tǒng)中一樣處理文件 - 你可以添加纸淮,刪除平斩,移動(dòng)和編輯MFS文件,并自動(dòng)幫你完成更新鏈接和創(chuàng)建哈希的所有工作咽块。 它是一種抽象概念绘面,可以讓你像處理可變數(shù)據(jù)一樣,處理不可變數(shù)據(jù)侈沪。

可以通過(guò)調(diào)用IPFS CLI(命令行界面)和API中的files命令訪問(wèn)MFS揭璃。 在本教程中,我們將探索Files API亭罪。

如果你之前使用過(guò)命令行中的文件和目錄瘦馍,那么許多MFS方法看起來(lái)都因該非常熟悉!

讓我們開(kāi)始探索如何使用IPFS中的文件皆撩!

Lesson 2 查看目錄狀態(tài)

使用ProtoSchool中的文件

在我們的ProtoSchool教程中扣墩,當(dāng)你每次點(diǎn)擊課程中的“提交”按鈕時(shí)哲银,我們都會(huì)在瀏覽器中為您創(chuàng)建一個(gè)新的IPFS節(jié)點(diǎn)扛吞。 每當(dāng)你在我們的課程中看到ipfs.someMethod()時(shí),ipfs就是一個(gè)引用你的IPFS實(shí)例的變量荆责,也稱為節(jié)點(diǎn)滥比。 你執(zhí)行的操作僅影響你自己的IPFS節(jié)點(diǎn),而不影響屬于你的peers上的節(jié)點(diǎn)做院。

我們正在后臺(tái)創(chuàng)建你的IPFS節(jié)點(diǎn)盲泛,以便你可以專注于我們的課程濒持,但最終你需要學(xué)會(huì)安裝IPFS并在終端中運(yùn)行程序來(lái)啟動(dòng)你自己的本地節(jié)點(diǎn)。 當(dāng)你準(zhǔn)備好進(jìn)行實(shí)驗(yàn)時(shí)寺滚,可以在我們的文檔中找到有關(guān)安裝IPFS初始化節(jié)點(diǎn)的說(shuō)明文檔柑营。

如前所述,與可變文件系統(tǒng)相關(guān)的方法是Files API的一部分村视,因此它們將采用ipfs.files.someMethod()的格式官套。 讓我們看一下即使在將任何文件添加到IPFS節(jié)點(diǎn)之前也可以開(kāi)始使用的簡(jiǎn)單方法。

使用ipfs.files.stat探索IPFS節(jié)點(diǎn)

使用IPFS節(jié)點(diǎn)時(shí)蚁孔,通常需要檢查文件或目錄的狀態(tài)奶赔。 您可以使用ipfs.files.stat執(zhí)行此操作,傳入你要查看的路徑杠氢。

例如站刑,要查看位于根目錄(/)中的名為stuff的目錄的狀態(tài),我們可以像這樣調(diào)用方法:

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

此方法返回一個(gè)包含有關(guān)我們的文件或目錄的基本數(shù)據(jù)的對(duì)象:

  • hash(帶有加密哈希的字符串)
  • size(文件或目錄大小鼻百,以字節(jié)為單位的整數(shù))
  • cumulativeSize(以字節(jié)為單位構(gòu)成DAGNodes文件的整數(shù)大薪事谩)
  • type(可以是目錄或文件的字符串)
  • blocks(如果type是目錄,這是目錄中的文件數(shù);如果type是文件愕宋,則是組成文件的塊數(shù))
  • withLocality(一個(gè)布爾值玻靡,表示是否存在位置信息)
  • local(一個(gè)布爾值,表示查詢的dag是否完全存在于本地)
  • sizeLocal(一個(gè)整數(shù)中贝,表示本地存在的數(shù)據(jù)的累計(jì)大卸谀怼)

注意!目錄的size始終為0邻寿,無(wú)論它包含多少條目蝎土,因?yàn)槟夸泴?shí)際上只是一組指向其他文件和目錄的鏈接。相反绣否,目錄的cumulativeSize會(huì)隨著目錄內(nèi)容的變化而變化誊涯。它不僅代表該目錄中所有條目的文件大小,還代表描述這些條目的元數(shù)據(jù):類型蒜撮,塊大小等暴构。

需要注意的是,即使你的IPFS節(jié)點(diǎn)還沒(méi)有任何內(nèi)容段磨,也可以用stat對(duì)它進(jìn)行查看取逾。即使是空節(jié)點(diǎn)也有CID(哈希)。

小練習(xí)

Lesson 3 使用ProtoSchool中的文件

出于安全考慮苹支,Web瀏覽器不允許我們直接更改計(jì)算機(jī)文件系統(tǒng)中的文件砾隅。 因此,你需要將一個(gè)或多個(gè)文件上傳到本教程中使用的瀏覽器债蜜。

在每個(gè)練習(xí)中晴埂,你會(huì)發(fā)現(xiàn)可以通過(guò)拖放或從文件資源管理器中選擇文件來(lái)上傳文件究反。 如果仔細(xì)查看代碼編輯器中的run函數(shù),你會(huì)發(fā)現(xiàn)它現(xiàn)在需要一個(gè)參數(shù)files儒洛。 當(dāng)您從計(jì)算機(jī)上傳文件時(shí)精耐,我們必須確保它們作為文件數(shù)組傳遞給函數(shù)。 只要你不刷新瀏覽器琅锻,這些文件將在本教程的下一課中保持可訪問(wèn)狀態(tài)黍氮,但你也可以選擇上傳不同的文件以供每節(jié)課使用。

練習(xí)準(zhǔn)備工作浅浮,請(qǐng)從你的計(jì)算機(jī)上傳一個(gè)或多個(gè)文件沫浆,并查看瀏覽器收到的文件數(shù)組。

小練習(xí)

Lesson 4 將文件添加到MFS

現(xiàn)在我們可以在瀏覽器中訪問(wèn)文件滚秩,讓我們看看如何將它們添加到IPFS中专执。
要將文件添加到IPFS,我們可以使用MFS files.write方法郁油,如下所示:

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

MFS的 files.write方法可以接受Buffer本股,ReadableStreamPullStream桐腌,Blob(僅在瀏覽器中)或string path(僅在Node.js中)形式的文件拄显。瀏覽器中的文件對(duì)象是一種Blob格式,我們繼續(xù)案站!

即使瀏覽器中的文件對(duì)象碰巧知道自己的文件名躬审,Blob通常也不知道,因此IPFS無(wú)法直接確定真實(shí)的文件名蟆盐。我們必須提供所需的文件名作為path的一部分承边。

path是你要在IPFS實(shí)例中創(chuàng)建的新路徑,包括所需的文件名石挂。 (請(qǐng)注意博助,它是我們描述的目標(biāo)路徑,而不是文件已經(jīng)保存在你的計(jì)算機(jī)上的路徑痹愚。)

MFS files.write方法與你在自己的計(jì)算機(jī)上使用的方法類似富岳,實(shí)際上是為編輯現(xiàn)有文件的內(nèi)容而構(gòu)建的。不過(guò)拯腮,如果在給定的路徑不存在這個(gè)文件窖式,我們也可以通過(guò)一個(gè)布爾類型的選項(xiàng){create : true}來(lái)創(chuàng)建一個(gè)全新的文件。

因此疾瓮,如果我們的瀏覽器中有一個(gè)文件對(duì)象脖镀,可通過(guò)變量catPic訪問(wèn)飒箭,并且我們想將它添加到IPFS上的根目錄并將其命名為cat.jpg狼电,我們可以這樣做:

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

如果有必要蜒灰,我們可以使用拼接字符串(將字符串連接在一起)的方式來(lái)創(chuàng)建相同的路徑。 如果你的文件名是文件對(duì)象的屬性肩碟,這種方法在瀏覽器中使用就很方便强窖。

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

請(qǐng)注意削祈,files.write方法不提供返回值髓抑。
稍后我們將介紹如何將文件添加到根目錄以外的目錄咙崎。

小練習(xí)

Lesson 5 查看目錄的內(nèi)容

當(dāng)我們使用files.write向MFS添加文件時(shí),該方法沒(méi)有返回任何值吨拍,但我們?nèi)匀豢梢詸z查以確保一切按預(yù)期工作。
在Mutable File System中伊滋,我們可以使用files.ls方法檢查目錄。 如果你曾使用命令行列出計(jì)算機(jī)上目錄的內(nèi)容队秩,那么對(duì)這種方法應(yīng)該會(huì)非常熟悉笑旺。
file.ls方法如下所示:

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

該方法默認(rèn)列出根目錄(/)的內(nèi)容,或者你可以選擇指定要檢查的特定path(目錄)筒主,例如/ catPics鸟蟹,
file.ls生成一個(gè)對(duì)象數(shù)組,你正在查看的目錄中的每個(gè)文件或目錄戏锹,具有以下屬性:

  • name(默認(rèn)值):文件名
  • type({long : true} 可選項(xiàng)):對(duì)象的類型(0 -文件 或 1 - 目錄)
  • size({long : true} 可選項(xiàng)):文件的大小(以字節(jié)為單位)
  • hash({long : true} 可選項(xiàng)):表示IPFS文件的加密哈宪欤或內(nèi)容標(biāo)識(shí)符(CID)

注意奈搜!要返回所有這些屬性的值,必須使用選項(xiàng){long : true}猜极。 否則恨胚,除名稱字段外的所有屬性都將返回為0(對(duì)于size和type)或""(對(duì)于hash)

如果我們想查看 /catPics 目錄下所有內(nèi)容的詳細(xì)信息,我們可以這樣做:

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

你可以在files.ls API文檔中了解有關(guān)其他選項(xiàng)的更多信息来农。

小練習(xí)

Lesson 6 了解CID如何隨著數(shù)據(jù)的變化而變化

正如你在去中心化數(shù)據(jù)結(jié)構(gòu)教程中所了解到的沃于,CID(內(nèi)容標(biāo)識(shí)符)與它們通過(guò)加密哈希表示的內(nèi)容一一對(duì)應(yīng)。 具有相同內(nèi)容的兩個(gè)文件具有相同的CID(哈希)繁莹,并且就算只有一點(diǎn)點(diǎn)差異的兩個(gè)文件咨演,都具有不同的CID。 目錄也是如此零院。 每次更新文件或目錄的內(nèi)容時(shí)村刨,其CID都會(huì)更改。

當(dāng)你的根目錄為空并且使用ipfs.files.stat檢查其狀態(tài)時(shí)嵌牺,你會(huì)看到以下結(jié)果:

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

你現(xiàn)在添加了一個(gè)或多個(gè)文件會(huì)是什么樣子? 哪些字段現(xiàn)在應(yīng)該更改募疮?

小練習(xí)

Lesson 7 創(chuàng)建一個(gè)目錄

我們已經(jīng)學(xué)會(huì)了如何將文件添加到根目錄僻弹,但是我們?nèi)绾蝿?chuàng)建一個(gè)新目錄呢蹋绽? 同樣的,這與你在自己計(jì)算機(jī)上使用命令行的過(guò)程非常相似卸耘。

MFS的files.mkdir方法在指定路徑創(chuàng)建新目錄蚣抗。 例如,要將一個(gè)叫images目錄添加到根目錄(/)钝域,我們可以這樣做:

await ipfs.files.mkdir('/images')

可選項(xiàng)parents(默認(rèn)為false)指定了在給定的路徑中,如果有父目錄不存在的情況,是否要?jiǎng)?chuàng)建該父目錄赂毯。 這在上面的例子中不需要党涕,因?yàn)樾碌膇mages目錄是現(xiàn)有目錄(/)的直接子目錄。 但是膛堤,如果我們想要?jiǎng)?chuàng)建一個(gè)還不存在的新目錄肥荔,我們需要將parent的值顯式設(shè)置為true,如下所示:

await ipfs.files.mkdir('/my/beautiful/images', { parents : true })

注意中符!雖然創(chuàng)建不存在路徑的方法是類似的誉帅,但請(qǐng)注意我們使用files.mkdir的{parents : true}選項(xiàng),而不是files.write提供的{create : true}選項(xiàng)档插。

小練習(xí)

Lesson 8 移動(dòng)文件或目錄

MFS允許你使用files.mv方法在目錄之間移動(dòng)文件亚再,就像在本地計(jì)算機(jī)上一樣氛悬。

該方法如下所示:

await ipfs.files.mv(...from, to, [options])

from是你要移動(dòng)的內(nèi)容的源路徑(或路徑)。 to是目標(biāo)路徑忍级。

如果目標(biāo)路徑引用了尚不存在的上級(jí)路徑伪朽,則需要使用{parents : true}選項(xiàng),就像使用files.mkdir一樣朴肺。

你可以使用files.mv執(zhí)行許多不同的操作:

// move a single file into a directory
await ipfs.files.mv('/source-file.txt', '/destination-directory')

// move multiple files into a directory (note the two acceptable formats)
await ipfs.files.mv('/source-file-1.txt', '/source-file-2.txt', '/destination-directory')
await ipfs.files.mv(['/source-file-1.txt', '/source-file-2.txt'], '/destination-directory')

// move a directory into another directory
await ipfs.files.mv('/source-directory', '/destination-directory')

// overwrite the contents of a destination file with the contents of a source file
await ipfs.files.mv('/source-file.txt', '/destination-file.txt')

小練習(xí)

Lesson 9 復(fù)制文件或目錄

與files.mv不同戈稿,files.mv在將項(xiàng)目移動(dòng)到其目標(biāo)路徑后刪除其源路徑中的項(xiàng)目,files.cp方法允許你將文件或目錄復(fù)制到新位置需了,同時(shí)保留源位置的項(xiàng)目般甲。

該方法如下所示:

await ipfs.files.mv(...from, to, [options])

from是你要移動(dòng)的內(nèi)容的源路徑(或路徑)。 to是目標(biāo)路徑墓造。
如果目標(biāo)路徑引用了尚不存在的父目錄锚烦,則需要使用{parents : true}選項(xiàng),就像使用files.mkdir一樣谱煤。
你可以使用files.mv執(zhí)行許多不同的操作:

// move a single file into a directory
await ipfs.files.mv('/source-file.txt', '/destination-directory')

// move multiple files into a directory (note the two acceptable formats)
await ipfs.files.mv('/source-file-1.txt', '/source-file-2.txt', '/destination-directory')
await ipfs.files.mv(['/source-file-1.txt', '/source-file-2.txt'], '/destination-directory')

// move a directory into another directory
await ipfs.files.mv('/source-directory', '/destination-directory')

// overwrite the contents of a destination file with the contents of a source file
await ipfs.files.mv('/source-file.txt', '/destination-file.txt')

小練習(xí)

Lesson 10 瀏覽文件的內(nèi)容

MFS有一個(gè)files.read方法刘离,允許你在緩存中顯示文件的內(nèi)容睹栖。 這使我們可以輕松讀取.txt文件的內(nèi)容野来。

該方法采用以下格式:

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

path是要讀取的文件的路徑,它必須指向文件而不是目錄曼氛。
files.read方法返回一個(gè)Buffer舀患,可以使用 toString('utf8') 方法將其轉(zhuǎn)換為字符串。 例如:

let bufferedContents = await ipfs.files.read('/directory/some-file.txt')  // a buffer
let contents = bufferedContents.toString('utf8') // a string

或者

let contents = (await ipfs.files.read('/directory/some-file.txt')).toString('utf8') // a string
// notice the parentheses around the entire await statement

當(dāng)你準(zhǔn)備在真機(jī)上嘗試此操作時(shí)餐抢,你需要注意files.read方法可能會(huì)因?yàn)樽x取的文件太大,從而導(dǎo)致大量?jī)?nèi)存被占用碳锈。 你可能希望通過(guò)files.readReadableStreamfiles.readPullStream方法來(lái)進(jìn)行進(jìn)行文件內(nèi)容的瀏覽欺抗。

小練習(xí)

Lession 11 刪除文件或目錄

MFS允許您使用files.rm方法刪除文件或目錄:

await ipfs.files.rm(...paths, [options])

paths是要?jiǎng)h除的一個(gè)或多個(gè)路徑绞呈。

默認(rèn)情況下,如果你嘗試刪除非空目錄报强,則將導(dǎo)致操作失敗秉溉。 要?jiǎng)h除目錄及其中包含的所有內(nèi)容碗誉,你需要使用{recursive : true}選項(xiàng)。

// remove a file
await ipfs.files.rm('/my/beautiful/file.txt')

// remove multiple files (note the two acceptable formats with or without [ ])
await ipfs.files.rm('/my/beautiful/file.txt', '/my/other/file.txt')
await ipfs.files.rm(['/my/beautiful/file.txt', '/my/other/file.txt'])

// remove a directory and its contents
await ipfs.files.rm('/my/beautiful/directory', { recursive: true })

// remove a directory only if it is empty
await ipfs.files.rm('/my/beautiful/directory')

小練習(xí)

資料

探索更多學(xué)習(xí)資料

協(xié)議學(xué)院 上海分院 翻譯
原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市铛只,隨后出現(xiàn)的幾起案子糠溜,更是在濱河造成了極大的恐慌,老刑警劉巖蜕着,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件红柱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锤悄,警方通過(guò)查閱死者的電腦和手機(jī)零聚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門众眨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)娩梨,“玉大人览徒,你說(shuō)我怎么就攤上這事∨κ玻” “怎么了躲叼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵枫慷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我探孝,道長(zhǎng)誉裆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任粱腻,我火速辦了婚禮绍些,結(jié)果婚禮上滔驶,老公的妹妹穿的比我還像新娘。我一直安慰自己萝快,他們只是感情好著角,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吏口。 她就那樣靜靜地躺著冰更,像睡著了一般昂勒。 火紅的嫁衣襯著肌膚如雪戈盈。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天归斤,我揣著相機(jī)與錄音刁岸,去河邊找鬼。 笑死迫横,一個(gè)胖子當(dāng)著我的面吹牛根吁,可吹牛的內(nèi)容都是我干的击敌。 我是一名探鬼主播拴事,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼刃宵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了哮针?” 一聲冷哼從身側(cè)響起坦袍,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捂齐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后包颁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蘑险,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年漠其,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竿音。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柴信,死狀恐怖随常,靈堂內(nèi)的尸體忽然破棺而出萄涯,到底是詐尸還是另有隱情,我是刑警寧澤枣察,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布燃逻,位于F島的核電站伯襟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叛赚。R本人自食惡果不足惜稽揭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一淀衣、第九天 我趴在偏房一處隱蔽的房頂上張望昙读。 院中可真熱鬧膨桥,春花似錦、人聲如沸沮稚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挽荡。三九已至即供,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間青自,已是汗流浹背驱证。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工抹锄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呆万。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓车份,卻偏偏與公主長(zhǎng)得像扫沼,于是被迫代替她去往敵國(guó)和親庄吼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容