go-ipfs-api

该博客介绍了如何使用Go语言的`go-ipfs-api`库与IPFS进行交互,包括数据的上传、从IPFS网络中获取数据以及文件的固定。示例代码展示了如何将交易结构体序列化后上传到IPFS,然后从IPFS读取并反序列化回原始结构体。

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)
	}
### go-ipfs 使用指南与技术文档 go-ipfsIPFS 的一个实现,基于 Go 语言开发。它提供了丰富的功能和技术文档,帮助开发者理解和使用该工具。以下是关于 go-ipfs 的一些关键信息和使用指南。 #### 安装与配置 go-ipfs 的安装方法可以通过官方文档获取[^1]。通常情况下,用户可以通过以下命令安装最新版本的 go-ipfs: ```bash # 下载并安装 go-ipfs curl -o /usr/local/bin/ipfs https://dist.ipfs.io/go-ipfs/v0.14.0/go-ipfs_v0.14.0_linux-amd64 chmod +x /usr/local/bin/ipfs ``` 确保系统中已安装 curl 和必要的依赖项后执行上述命令即可完成安装[^2]。 #### 常用命令 go-ipfs 提供了丰富的命令行工具,用于管理文件、节点和其他资源。以下是一些常用的命令示例: - 初始化 IPFS 节点: ```bash ipfs init ``` - 启动 IPFS 节点: ```bash ipfs daemon ``` - 添加文件到 IPFS 网络: ```bash ipfs add <file-path> ``` - 查找文件的哈希值: ```bash ipfs cat <hash-value> ``` 这些命令为用户提供了基本的操作能力,能够快速上手 go-ipfs[^3]。 #### 高级功能 go-ipfs 支持多种高级功能,例如 IPNS(InterPlanetary Name System)和 Bitswap 协议优化。IPNS 允许用户通过可变名称访问内容,而 Bitswap 则负责高效的数据传输。例如,Bitswap 的改进显著降低了容器镜像分发的时间。 在使用 IPNS 时,用户可以指定路径参数以及解析选项。例如: ```bash ipfs name publish --key=<key-name> /ipfs/<hash> ``` 此命令将发布一个指向指定哈希值的内容,并绑定到指定的密钥。 #### 性能优化 对于大规模数据分发场景,go-ipfs 的性能优化尤为重要。通过调整 Bitswap 协议参数或利用分布式缓存机制,可以显著提升数据传输效率。例如,在某些测试中,优化后的 Bitswap 分支将 300MiB 图像的拉取时间从 9.08 秒缩短至 3.16 秒[^3]。 #### 技术文档 go-ipfs 的技术文档涵盖了从基础概念到高级主题的广泛内容。用户可以通过以下链接访问完整的文档: - [go-ipfs 官方文档](https://docs.ipfs.tech/) - [IPFS API 参考文档](https://docs.ipfs.tech/reference/api/) 这些文档不仅提供了详细的命令说明,还包含了许多实际案例和最佳实践[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值