我是靠谱客的博主 听话柠檬,最近开发中收集的这篇文章主要介绍IPFS部署及文件上传(golang),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

IPFS节点部署

下载
wget https://dist.ipfs.io/kubo/v0.14.0/kubo_v0.14.0_linux-amd64.tar.gz 
解压
tar xvfz kubo_v0.14.0_linux-amd64.tar.gz
安装
cd kubo
./install.sh 
初始化
ipfs  init
查看初始化后返回的节点信息
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme
配置ipfs跨域
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT","GET", "POST", "OPTIONS"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers '["Authorization"]'
ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers '["Location"]'
配置IPFS外网访问控制台
cd ~/.ipfs
vi config
把127.0.0.1修改成0.0.0.0

IPFS端口说明
4001 主要端口,进行p2p连接和同步数据
5001 ipfs的api端口,管理页面的端口,可以进行数据的读写
8080 ipfs gateway端口,用于读取ipfs节点数据,默认只读
如果使用防火墙,记得把这几个端口开放,否则外网还是无法访问
启动IPFS
nohup  ipfs daemon  >> ./log/nohup`date +%Y-%m-%d`.out 2>&1 &
查看连接节点
ipfs swarm peers
浏览器访问 http://localhost:5001/webui (管理页面,文件上传等)会重定向到自己节点

文件上传代码

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	shell "github.com/ipfs/go-ipfs-api"
	"io/ioutil"
	"log"
	"os"
)

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
}
func UploadIPFS(raw []byte) (string, error) {
	sh := shell.NewShell("localhost:5001")
	reader := bytes.NewReader(raw)
	// https://github.com/ipfs/go-ipfs-api/blob/master/add.go
	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 main() {
	hashMap := make(map[int]string, 10000)
	for i := 0; i < 10000; i++ {
		file := fmt.Sprintf("./greencard/green_%d.gif", i)
		raw := Read(file)
		if raw != nil {
			hash, err := UploadIPFS(raw)
			if err != nil {
				log.Println("UploadIPFS err", err)
			} else {
				hashMap[i] = fmt.Sprintf("https://ipfs.io/ipfs/%s?filename=%s", hash, hash)
			}
			log.Println("hash", hash)
		}
	}
	WriteHash("hash.json", hashMap)
}

最后

以上就是听话柠檬为你收集整理的IPFS部署及文件上传(golang)的全部内容,希望文章能够帮你解决IPFS部署及文件上传(golang)所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部