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

in STEEM CN/中文6 years ago

ethipfs.jpg

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

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

存文本

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

读文本

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

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

Coin Marketplace

STEEM 0.05
TRX 0.32
JST 0.079
BTC 66571.33
ETH 1821.97
USDT 1.00
SBD 0.42