• ipfs存储和获取数据


    安装ipfs-api

    切换到项目根目录,安装ipfs-api

    npm install --save ipfs-api

     

    导入IPFS

    const ipfsAPI = require('ipfs-api');
    const ipfs = ipfsAPI({host: 'localhost', port: '5001', protocol: 'http'});

     

    上传大文本字符串到IPFS

    saveTextBlobOnIpfs = (blob) => {
        return new Promise(function(resolve, reject) {
          const descBuffer = Buffer.from(blob, 'utf-8');
          ipfs.add(descBuffer).then((response) => {
            console.log(response)
            resolve(response[0].hash);
          }).catch((err) => {
            console.error(err)
            reject(err);
          })
        })
    }

     

    上传数据到IPFS

    this.saveTextBlobOnIpfs(ipfsContent).then((hash) => {
        console.log(hash);
    });

    hash即是数据上传到IPFS后返回的HASH字符串

     

    上传文件到IPFS

    上传图片到IPFS的Promise函数

    saveImageOnIpfs = (reader) => {
      return new Promise(function(resolve, reject) {
        const buffer = Buffer.from(reader.result);
        ipfs.add(buffer).then((response) => {
          console.log(response)
          resolve(response[0].hash);
        }).catch((err) => {
          console.log(err)
          reject(err);
        })
      })
    }

    获取图片并上传

    var file = this.$refs.files[0];
    var reader = new FileReader();
    // reader.readAsDataURL(file);//上传图片路径
    reader.readAsArrayBuffer(file)//上传图片内容
    reader.onloadend = (e) => {
       console.log(reader)
       this.saveImageOnIpfs(reader)
    }

     

    从IPFS读取数据

    ipfs.cat(this.state.strHash).then((stream) => {
        console.log(stream);
        let strContent = Utf8ArrayToStr(stream);
        console.log(strContent);
    });

    streamUint8Array类型的数据,下面的方法是将Uint8Array转换为string字符串。

    function Utf8ArrayToStr(array) {
        var out, i, len, c;
        var 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;
            default:
              break;
          }
        }
    
        return out;
    }
    我自横刀向天笑,哈哈哈哈哈哈哈!
  • 相关阅读:
    前端到后台ThinkPHP开发整站(4)
    前端到后台ThinkPHP开发整站(2)
    字典树模版
    KMP模版
    EXKMP模版
    Manacher模版
    AC自动机练习题1:地图匹配
    AC自动机模版
    spring.net之aop加单例模式编写无try catch程序
    父类与子类之间赋值转换
  • 原文地址:https://www.cnblogs.com/yinian/p/9836740.html
Copyright © 2020-2023  润新知