这里用到了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)
发表回复