go-ipfs-api

go-ipfs-api,第1张


title: go-ipfs-api
date: 2021-12-05 21:28:22
categories:

数据库
tags:IPFS
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)cat命令用于显示ipfs网络中的一个文件内容,注意显示的是字节形式。
	if err != nil {
		fmt.Println(err)
	}
	body, err := ioutil.ReadAll(read)//ReadAll 从 r 读取直到出现错误或 EOF 并返回它读取的数据。
	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}
文件 上传
var sh *shell.Shell
func UploadIPFS(str string) string {
	sh = shell.NewShell("localhost:5001")
	hash, err := sh.AddDir(str) //AddDir 递归地添加一个目录及其下的所有文件
	if err != nil {
		fmt.Println("上传ipfs时错误:", err)
	}
	return hash
}
func main() {
	hash := UploadIPFS("/Users/tianzhiwei/1.md")
	fmt.Println("文件hash是:", hash)
}
读取
func main() {
	str:=CatIPFS("Qmbp8846ptJUqR49pDr1WaN2q8iheLFE3ainwmfx2HvS4y")
	println(str)
}
//从ipfs获取数据   只读
func CatIPFS(hash string) string {
	sh = shell.NewShell("localhost:5001")
	read, err := sh.Cat(hash)//cat命令用于显示ipfs网络中的一个文件内容,注意显示的是字节形式。
	if err != nil {
		fmt.Println(err)
	}
	body, err := ioutil.ReadAll(read)//ReadAll 从 r 读取直到出现错误或 EOF 并返回它读取的数据。
	return string(body)
}
下载
func main() {
	GetIPFS("Qmbp8846ptJUqR49pDr1WaN2q8iheLFE3ainwmfx2HvS4y")
}
func GetIPFS(hash string){
	sh = shell.NewShell("localhost:5001")
	 err := sh.Get(hash,"/Users/tianzhiwei/go/1.md")
	 //   /Users/tianzhiwei/go 不写名字会以哈希值命名
	if err != nil {
		fmt.Println(err)
	}
}
pin
	 err := sh.Pin("Qmbp8846ptJUqR49pDr1WaN2q8iheLFE3ainwmfx2HvS4y")//固定给定的路径
	if err != nil {
		fmt.Println(err)
	}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/990421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存