需要的库:
import (
shell "github.com/ipfs/go-ipfs-api"
)
上传到IPFS代码demo:
func IPFSTest(filename string) (string, string) {
hashMap := make(map[int]string, 10000)
// 上传文件 -- 可以是前端上传,也可以是后端上传
file := fmt.Sprintf("file/" + filename) // 本地图片
raw := Read(file)
d := ""
if raw != nil {
// 文件夹---
hash, err := UploadIPFS(raw)
if err != nil {
log.Println("UploadIPFS err", err)
} else {
hashMap[0] = fmt.Sprintf("https://ipfs.io/ipfs/%s?filename=%s", hash, hash)
}
d = hash
log.Println("hash", hash)
}
// 写到本地
WriteHash("hash.json", hashMap)
return hashMap[0], d
}
func UploadIPFS(raw []byte) (string, error) {
sh := shell.NewShell(IPFS_Host)
reader := bytes.NewReader(raw)
fileHash, err := sh.Add(reader)
if err != nil {
return "", err
}
fmt.Println(fileHash)
return fileHash, nil
}
// 写数据
func WriteHash(writeJson string, cont interface{}) {
if distFile, err := os.OpenFile(writeJson, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666); err != nil {
log.Println("create file failed", err)
} else {
enc := json.NewEncoder(distFile)
if err1 := enc.Encode(cont); err1 != nil {
log.Println("write failed", err1)
} else {
log.Println("write successful")
}
}
}
func Read(filepath string) []byte {
f, err := os.Open(filepath)
if err != nil {
log.Println("read file fail", err)
return nil
}
defer f.Close()
fd, err := ioutil.ReadAll(f)
if err != nil {
log.Println("read to fd fail", err)
return nil
}
return fd
}
实际效果(本地节点开放了5001端口才可以查看):
实际上传文件、图片、视频查看地址:
https://ipfs.io/ipfs/QmNtCUPC6sBZo8rmCjFhQkU6LAnB8ejDi2LTziFFeir838
https://ipfs.io/ipfs/
实际连接:https://ipfs.io/ipfs/+hash数据;访问上传到节点数据,上传后建议过几分钟后再去获取,确保已经同步到访问的节点数据。
注意:訪問ipfs.io需要可續上網
本期就到这里,下期再见。
同学们,兴趣是最好的老师;只争朝夕,不负韶华!加油!
参考资料:
Go语言中文文档
http://www.golang.ltd/
Go语言在线编辑器:
http://OL.Golang.LTD/
LollipopGo社区(筹建中)
https://www.LollipopGo.Com/