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查看存储结果。

posted @ 2022-04-20 17:10  Mr.peter  阅读(477)  评论(1编辑  收藏  举报