前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言情怀--第101期 区块链技术-以太坊公链NFT图片去中心化存储-第2节:go语言实现IPFS存储demo

Golang语言情怀--第101期 区块链技术-以太坊公链NFT图片去中心化存储-第2节:go语言实现IPFS存储demo

作者头像
李海彬
发布2022-12-14 14:21:06
3860
发布2022-12-14 14:21:06
举报
文章被收录于专栏:Golang语言社区Golang语言社区

需要的库:

代码语言:javascript
复制
import (
    shell "github.com/ipfs/go-ipfs-api"
)

上传到IPFS代码demo:

代码语言:javascript
复制
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端口才可以查看):

实际上传文件、图片、视频查看地址:

代码语言:javascript
复制
https://ipfs.io/ipfs/QmNtCUPC6sBZo8rmCjFhQkU6LAnB8ejDi2LTziFFeir838
代码语言:javascript
复制
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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档