IPFS部署及文件上传(golang)

4 篇文章 0 订阅
该文详细介绍了如何部署IPFS节点,包括下载、解压、安装、配置及启动步骤,并提供了管理页面和文件上传的代码示例。通过配置跨域和端口设置,确保外网访问。此外,还展示了利用Go语言将文件上传至IPFS的代码流程。
摘要由CSDN通过智能技术生成

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)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值