使用go操作azure blob存储

这里用到了azure的官方库, 最低需要我们的go版本是1.18

先安装

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

这里我们使用连接字符串来做身份认证, 获取最简单, 在azure portal上找到


首先是遍历blob

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	connStr = "你的连接字符串"
)

func main() {
	service, err := azblob.NewServiceClientFromConnectionString(connStr, nil)
	if err != nil {
		log.Fatal(err)
	}
	container, err := service.NewContainerClient("test")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	pager := container.ListBlobsFlat(nil)
	for pager.NextPage(ctx) {
		resp := pager.PageResponse()

		for _, v := range resp.Segment.BlobItems {
			fmt.Println(*v.Name, *v.Properties.ContentLength)
		}
	}

	if err = pager.Err(); err != nil {
		fmt.Println(err)
	}
}

重点是v这个变量, 他是azblob.BlobItemInternal类型的, 里面有我们blob容器里面的文件属性, 比较常用的属性都封装在了Properties这个属性里面,包括大小, 创建时间等等


然后是读取一个blob容器内的文件内容

package main

import (
	"bytes"
	"context"
	"fmt"
	"log"

	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	connStr = "你的连接字符串"
)

func main() {
	service, err := azblob.NewServiceClientFromConnectionString(connStr, nil)
	if err != nil {
		log.Fatal(err)
	}
	container, err := service.NewContainerClient("test")
	if err != nil {
		log.Fatal(err)
	}
	blockBlob, err := container.NewBlockBlobClient("key_password.txt")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()
	get, err := blockBlob.Download(ctx, nil)
	if err != nil {
		log.Fatal(err)
	}
	downloadedData := &bytes.Buffer{}
	reader := get.Body(&azblob.RetryReaderOptions{})
	_, err = downloadedData.ReadFrom(reader)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(downloadedData.String())
}

然后是删除我们blob容器内的一个文件

_, err = blockBlob.Delete(ctx, nil)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注