/
blockblob.go
69 lines (57 loc) · 2.49 KB
/
blockblob.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
package storage
import (
"context"
"encoding/base64"
"strings"
"github.com/Azure/azure-storage-blob-go/azblob"
)
func getBlockBlobURL(ctx context.Context, accountName, accountGroupName, containerName, blobName string) azblob.BlockBlobURL {
container := getContainerURL(ctx, accountName, accountGroupName, containerName)
blob := container.NewBlockBlobURL(blobName)
return blob
}
// CreateBlockBlob creates a new block blob
func CreateBlockBlob(ctx context.Context, accountName, accountGroupName, containerName, blobName string) (azblob.BlockBlobURL, error) {
b := getBlockBlobURL(ctx, accountName, accountGroupName, containerName, blobName)
data := "blob created by Azure-Samples, okay to delete!"
_, err := b.Upload(
ctx,
strings.NewReader(data),
azblob.BlobHTTPHeaders{
ContentType: "text/plain",
},
azblob.Metadata{},
azblob.BlobAccessConditions{},
)
return b, err
}
// PutBlockOnBlob adds a block to a block blob. It does not commit the block.
func PutBlockOnBlob(ctx context.Context, accountName, accountGroupName, containerName, blobName, message string, blockNum int) error {
b := getBlockBlobURL(ctx, accountName, accountGroupName, containerName, blobName)
id := base64.StdEncoding.EncodeToString([]byte(string(blockNum)))
_, err := b.StageBlock(ctx, id, strings.NewReader(message), azblob.LeaseAccessConditions{}, nil)
return err
}
// GetUncommitedBlocks gets a list of uncommited blobs
func GetUncommitedBlocks(ctx context.Context, accountName, accountGroupName, containerName, blobName string) (*azblob.BlockList, error) {
b := getBlockBlobURL(ctx, accountName, accountGroupName, containerName, blobName)
return b.GetBlockList(ctx, azblob.BlockListUncommitted, azblob.LeaseAccessConditions{})
}
// CommitBlocks commits the uncommitted blocks to the blob
func CommitBlocks(ctx context.Context, accountName, accountGroupName, containerName, blobName string) error {
b := getBlockBlobURL(ctx, accountName, accountGroupName, containerName, blobName)
list, err := GetUncommitedBlocks(ctx, accountName, accountGroupName, containerName, blobName)
if err != nil {
return err
}
IDs := []string{}
for _, u := range list.UncommittedBlocks {
IDs = append(IDs, u.Name)
}
_, err = b.CommitBlockList(ctx, IDs, azblob.BlobHTTPHeaders{}, azblob.Metadata{}, azblob.BlobAccessConditions{})
return err
}