上传文本至IPFS  / 网络研习社#62

上传文本至IPFS / 网络研习社#62

ethipfs.jpg

在前篇文章《以太坊 + IPFS 数据存储可行方案》中有提到这样的数据存储方案,在以太坊上只存储文本的哈希值以节约gas。那么,问题来了,IPFS是如何存取文本的呢?

前期做网站的时候往IPFS中存过图片和视频,存文本稍微有点不同。把文档找来复习下。文档在这,https://github.com/ipfs/js-ipfs 。存取文本不是太难,有些固定的格式。

存文本

1
2
3
4
//上传文本
const content = Buffer.from('hello lemooljiang!')
let res = await that.ipfs.add(content)
console.log(345, res[0].hash)

读文本

因为文本会自动转成utf-8格式存储,所以,读出来还要转换成字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
let con = await that.ipfs.cat(hash)
let t = that.utf8ArrayToStr(con)

utf8ArrayToStr(array) {
let out, i, len, c
let char2, char3
out = ""
len = array.length
i = 0
while(i < len) {
c = array[i++]
switch(c >> 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += String.fromCharCode(c)
break
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = array[i++]
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F))
break
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = array[i++];
char3 = array[i++];
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0))
break
}
}
return out
}

方法就这两个,试了下,很快就成功了。这样的话,往以太坊上存东西就不会太费钱了,而且这种方案正在被越来越多的人采用,因为只要是IPFS网关就可以根据文本的哈希值直接读出文本的内容来,是不是很方便呢?! 这是我上传的一段文本哈希QmZcLE9qPzzyeJqT1yxErZcxbCSufXWSJRhywGLChegyL8,大家可以使用任意的IPFS网关去读下试试,比如这样: https://ipfs.eternum.io/ipfs/QmZcLE9qPzzyeJqT1yxErZcxbCSufXWSJRhywGLChegyL8


This page is synchronized from the post: ‘上传文本至IPFS / 网络研习社#62’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×