跳到主要内容

上传文件到Swarm

上个章节 我们在端口“8500”上运行了一个作为背景进程的swarm节点。 接下来就导入swarm包go-ethereumswearm/api/client。 我将把包装别名为bzzclient

import (
bzzclient "github.com/ethereum/go-ethereum/swarm/api/client"
)

调用NewClient函数向它传递swarm背景程序的url。

client := bzzclient.NewClient("http://127.0.0.1:8500")

用内容 hello world 创建示例文本文件hello.txt。 我们将会把这个文件上传到swarm。

hello world

在我们的Go应用程序中,我们将使用Swarm客户端软件包中的“Open”打开我们刚刚创建的文件。 该函数将返回一个File类型,它表示swarm清单中的文件,用于上传和下载swarm内容。

file, err := bzzclient.Open("hello.txt")
if err != nil {
log.Fatal(err)
}

现在我们可以从客户端实例调用Upload函数,为它提供文件对象。 第二个参数是一个可选添的现有内容清单字符串,用于添加文件,否则它将为我们创建。 第三个参数是我们是否希望我们的数据被加密。

返回的哈希值是文件的内容清单的哈希值,其中包含hello.txt文件作为其唯一条目。 默认情况下,主要内容和清单都会上传。 清单确保您可以使用正确的mime类型检索文件。

manifestHash, err := client.Upload(file, "", false)
if err != nil {
log.Fatal(err)
}

fmt.Println(manifestHash) // 2e0849490b62e706a5f1cb8e7219db7b01677f2a859bac4b5f522afd2a5f02c0

然后我们就可以在这里查看上传的文件 bzz://2e0849490b62e706a5f1cb8e7219db7b01677f2a859bac4b5f522afd2a5f02c0,具体如何下载,我们会在下个章节介绍。


完整代码

Commands

geth account new
export BZZKEY=970ef9790b54425bea2c02e25cab01e48cf92573
swarm --bzzaccount $BZZKEY

hello.txt

hello world

swarm_upload.go

package main

import (
"fmt"
"log"

bzzclient "github.com/ethereum/go-ethereum/swarm/api/client"
)

func main() {
client := bzzclient.NewClient("http://127.0.0.1:8500")

file, err := bzzclient.Open("hello.txt")
if err != nil {
log.Fatal(err)
}

manifestHash, err := client.Upload(file, "", false)
if err != nil {
log.Fatal(err)
}
fmt.Println(manifestHash) // 2e0849490b62e706a5f1cb8e7219db7b01677f2a859bac4b5f522afd2a5f02c0
}

title: 上传文件到Swarm description: "这本迷你书的本意是给任何想用Go进行以太坊开发的同学一个概括的介绍。本意是如果你已经对以太坊和Go有一些熟悉,但是对于怎么把两者结合起来还有些无从下手,那这本书就是一个好的起点。" image: "https://ipfs.decert.me/QmfZm4ZahZBcpLNoMwNBX5kNLNaQ6PsPRV7oiJXTudvYWy" sidebar_label: "上传文件到Swarm"

概述: 用Go来上传文件到Swarm的教程。

上传文件到Swarm

上个章节 我们在端口“8500”上运行了一个作为背景进程的swarm节点。 接下来就导入swarm包go-ethereumswearm/api/client。 我将把包装别名为bzzclient

import (
bzzclient "github.com/ethereum/go-ethereum/swarm/api/client"
)

调用NewClient函数向它传递swarm背景程序的url。

client := bzzclient.NewClient("http://127.0.0.1:8500")

用内容 hello world 创建示例文本文件hello.txt。 我们将会把这个文件上传到swarm。

hello world

在我们的Go应用程序中,我们将使用Swarm客户端软件包中的“Open”打开我们刚刚创建的文件。 该函数将返回一个File类型,它表示swarm清单中的文件,用于上传和下载swarm内容。

file, err := bzzclient.Open("hello.txt")
if err != nil {
log.Fatal(err)
}

现在我们可以从客户端实例调用Upload函数,为它提供文件对象。 第二个参数是一个可选添的现有内容清单字符串,用于添加文件,否则它将为我们创建。 第三个参数是我们是否希望我们的数据被加密。

返回的哈希值是文件的内容清单的哈希值,其中包含hello.txt文件作为其唯一条目。 默认情况下,主要内容和清单都会上传。 清单确保您可以使用正确的mime类型检索文件。

manifestHash, err := client.Upload(file, "", false)
if err != nil {
log.Fatal(err)
}

fmt.Println(manifestHash) // 2e0849490b62e706a5f1cb8e7219db7b01677f2a859bac4b5f522afd2a5f02c0

然后我们就可以在这里查看上传的文件 bzz://2e0849490b62e706a5f1cb8e7219db7b01677f2a859bac4b5f522afd2a5f02c0,具体如何下载,我们会在下个章节介绍。


完整代码

Commands

geth account new
export BZZKEY=970ef9790b54425bea2c02e25cab01e48cf92573
swarm --bzzaccount $BZZKEY

hello.txt

hello world

swarm_upload.go

package main

import (
"fmt"
"log"

bzzclient "github.com/ethereum/go-ethereum/swarm/api/client"
)

func main() {
client := bzzclient.NewClient("http://127.0.0.1:8500")

file, err := bzzclient.Open("hello.txt")
if err != nil {
log.Fatal(err)
}

manifestHash, err := client.Upload(file, "", false)
if err != nil {
log.Fatal(err)
}
fmt.Println(manifestHash) // 2e0849490b62e706a5f1cb8e7219db7b01677f2a859bac4b5f522afd2a5f02c0
}