我是靠谱客的博主 奋斗眼神,最近开发中收集的这篇文章主要介绍go语言调用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查看

任务完成。

最后

以上就是奋斗眼神为你收集整理的go语言调用ipfs进行文件的上传下载的全部内容,希望文章能够帮你解决go语言调用ipfs进行文件的上传下载所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部