• golang使用ipfs存储文件


    项目模块要求:将通道结构体序列化后上传到ipfs,并可以按照hash地址找回json

    package main
     
    import (
        "bytes"
        "encoding/json"
        "fmt"
        "io/ioutil"
     
        shell "github.com/ipfs/go-ipfs-api"
    )
     
    var sh *shell.Shell
     
    //交易结构体(未来的通道)
    type Transaction struct {
        Person1      string `json:"person1,omitempty" xml:"person1"`
        Person2      string `json:"person2,omitempty" xml:"person2"`
        Person1money string `json:"person1Money,omitempty" xml:"person1Money"`
        Person2money string `json:"person2Money,omitempty" xml:"person2Money"`
    }
     
    //数据上传到ipfs
    func UploadIPFS(str string) string {
        sh = shell.NewShell("localhost:5001")
     
        hash, err := sh.Add(bytes.NewBufferString(str))
        if err != nil {
            fmt.Println("上传ipfs时错误:", err)
        }
        return hash
    }
     
    //从ipfs下载数据
    func CatIPFS(hash string) string {
        sh = shell.NewShell("localhost:5001")
     
        read, err := sh.Cat(hash)
        if err != nil {
            fmt.Println(err)
        }
        body, err := ioutil.ReadAll(read)
     
        return string(body)
    }
     
    //通道序列化
    func marshalStruct(transaction Transaction) []byte {
     
        data, err := json.Marshal(&transaction)
        if err != nil {
            fmt.Println("序列化err=", err)
        }
        return data
    }
     
    //数据反序列化为通道
    func unmarshalStruct(str []byte) Transaction {
        var transaction Transaction
        err := json.Unmarshal(str, &transaction)
        if err != nil {
            fmt.Println("unmarshal err=%v", err)
        }
        return transaction
    }
     
    func main() {
        //生成一个交易结构体(未来的通道)
        transaction := Transaction{
            Person1:      "Aaron",
            Person2:      "Bob",
            Person1money: "100",
            Person2money: "200",
        }
        //结构体序列化
        data := marshalStruct(transaction)
        //上传到ipfs
        hash := UploadIPFS(string(data))
        fmt.Println("文件hash是", hash)
        //从ipfs下载数据
        str2 := CatIPFS(hash)
        //数据反序列化
        transaction2 := unmarshalStruct([]byte(str2))
     
        //验证下数据
        fmt.Println(transaction2)
    }
    结果:
    文件hash是 QmUvS3J7Z5n8Kvs64H55P7WivgmsGaKFiDTtBCxpUtkxw4
    {Aaron Bob 100 200}

    通过ipfs-desktop查看存储结果。

  • 相关阅读:
    优质Android小部件:索尼滚动相册
    Linux常用命令:文件与目录
    Android高效计算——RenderScript(二)
    Android高效计算——RenderScript(一)
    实用控件分享:自定义逼真相机光圈View
    Binder中的asInterface解析
    Android Adapter的几个方法
    Android中各种Drawable总结
    win10配置CUDA+Tensorflow2.0的一些经验
    关于Flash Helper Service的问题
  • 原文地址:https://www.cnblogs.com/peteremperor/p/16170692.html
Copyright © 2020-2023  润新知