lemooljiang avatar

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

lemooljiang

Published: 30 Apr 2020 › Updated: 30 Apr 2020

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

ethipfs.jpg

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

前期做网站的时候往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

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

Written by

Designer , Poet , Technology enthusiasts

Read more #cn posts


Best Posts From lemooljiang

We have not curated any of lemooljiang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From lemooljiang