package azblob
import "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
Example¶
This example is a quick-starter and demonstrates how to get started using the Azure Blob Storage SDK for Go.
Code:play
package main import ( "context" "fmt" "io" "log" "os" "strings" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { // Your account name and key can be obtained from the Azure Portal. accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } accountKey, ok := os.LookupEnv("AZURE_STORAGE_PRIMARY_ACCOUNT_KEY") if !ok { panic("AZURE_STORAGE_PRIMARY_ACCOUNT_KEY could not be found") } cred, err := azblob.NewSharedKeyCredential(accountName, accountKey) handleError(err) // The service URL for blob endpoints is usually in the form: http(s)://<account>.blob.core.windows.net/ client, err := azblob.NewClientWithSharedKeyCredential(fmt.Sprintf("https://%s.blob.core.windows.net/", accountName), cred, nil) handleError(err) // ===== 1. Create a container ===== containerName := "testcontainer" containerCreateResp, err := client.CreateContainer(context.TODO(), containerName, nil) handleError(err) fmt.Println(containerCreateResp) // ===== 2. Upload and Download a block blob ===== blobData := "Hello world!" blobName := "HelloWorld.txt" uploadResp, err := client.UploadStream(context.TODO(), containerName, blobName, strings.NewReader(blobData), &azblob.UploadStreamOptions{ Metadata: map[string]*string{"Foo": to.Ptr("Bar")}, Tags: map[string]string{"Year": "2022"}, }) handleError(err) fmt.Println(uploadResp) // Download the blob's contents and ensure that the download worked properly blobDownloadResponse, err := client.DownloadStream(context.TODO(), containerName, blobName, nil) handleError(err) // Use the bytes.Buffer object to read the downloaded data. // RetryReaderOptions has a lot of in-depth tuning abilities, but for the sake of simplicity, we'll omit those here. reader := blobDownloadResponse.Body downloadData, err := io.ReadAll(reader) handleError(err) if string(downloadData) != blobData { log.Fatal("Uploaded data should be same as downloaded data") } err = reader.Close() if err != nil { return } // ===== 3. List blobs ===== // List methods returns a pager object which can be used to iterate over the results of a paging operation. // To iterate over a page use the NextPage(context.Context) to fetch the next page of results. // PageResponse() can be used to iterate over the results of the specific page. pager := client.NewListBlobsFlatPager(containerName, nil) for pager.More() { resp, err := pager.NextPage(context.TODO()) handleError(err) for _, v := range resp.Segment.BlobItems { fmt.Println(*v.Name) } } // Delete the blob. _, err = client.DeleteBlob(context.TODO(), containerName, blobName, nil) handleError(err) // Delete the container. _, err = client.DeleteContainer(context.TODO(), containerName, nil) handleError(err) }
Example (Blob_AccessConditions)¶
This example shows how to perform operations on blob conditionally.
Code:play
package main import ( "context" "fmt" "log" "os" "strings" "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blockblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { accountName, accountKey := os.Getenv("AZURE_STORAGE_ACCOUNT_NAME"), os.Getenv("AZURE_STORAGE_ACCOUNT_KEY") credential, err := azblob.NewSharedKeyCredential(accountName, accountKey) handleError(err) blockBlob, err := blockblob.NewClientWithSharedKeyCredential(fmt.Sprintf("https://%s.blob.core.windows.net/mycontainer/Data.txt", accountName), credential, nil) handleError(err) // This function displays the results of an operation showResult := func(response *blob.DownloadStreamResponse, err error) { if err != nil { log.Fatalf("Failure: %s\n", err.Error()) } else { err := response.Body.Close() if err != nil { log.Fatal(err) } // The client must close the response body when finished with it fmt.Printf("Success: %v\n", response) } // Close the response if err != nil { return } fmt.Printf("Success: %v\n", response) } showResultUpload := func(response blockblob.UploadResponse, err error) { if err != nil { log.Fatalf("Failure: %s\n", err.Error()) } fmt.Printf("Success: %v\n", response) } // Create the blob upload, err := blockBlob.Upload(context.TODO(), streaming.NopCloser(strings.NewReader("Text-1")), nil) showResultUpload(upload, err) // Download blob content if the blob has been modified since we uploaded it (fails): downloadResp, err := blockBlob.DownloadStream( context.TODO(), &azblob.DownloadStreamOptions{ AccessConditions: &blob.AccessConditions{ ModifiedAccessConditions: &blob.ModifiedAccessConditions{ IfModifiedSince: upload.LastModified, }, }, }, ) showResult(&downloadResp, err) // Download blob content if the blob hasn't been modified in the last 24 hours (fails): downloadResp, err = blockBlob.DownloadStream( context.TODO(), &azblob.DownloadStreamOptions{ AccessConditions: &blob.AccessConditions{ ModifiedAccessConditions: &blob.ModifiedAccessConditions{ IfUnmodifiedSince: to.Ptr(time.Now().UTC().Add(time.Hour * -24))}, }, }, ) showResult(&downloadResp, err) // Upload new content if the blob hasn't changed since the version identified by ETag (succeeds): showResultUpload(blockBlob.Upload( context.TODO(), streaming.NopCloser(strings.NewReader("Text-2")), &blockblob.UploadOptions{ AccessConditions: &blob.AccessConditions{ ModifiedAccessConditions: &blob.ModifiedAccessConditions{IfMatch: upload.ETag}, }, }, )) // Download content if it has changed since the version identified by ETag (fails): downloadResp, err = blockBlob.DownloadStream( context.TODO(), &azblob.DownloadStreamOptions{ AccessConditions: &blob.AccessConditions{ ModifiedAccessConditions: &blob.ModifiedAccessConditions{IfNoneMatch: upload.ETag}}, }) showResult(&downloadResp, err) // Upload content if the blob doesn't already exist (fails): showResultUpload(blockBlob.Upload( context.TODO(), streaming.NopCloser(strings.NewReader("Text-3")), &blockblob.UploadOptions{ AccessConditions: &blob.AccessConditions{ ModifiedAccessConditions: &blob.ModifiedAccessConditions{IfNoneMatch: to.Ptr(azcore.ETagAny)}, }, })) }
Example (Blob_Client_Download)¶
This example shows how to download a large stream with intelligent retries. Specifically, if the connection fails while reading, continuing to read from this stream initiates a new GetBlob call passing a range that starts from the last byte successfully read before the failure.
Code:play
package main import ( "context" "fmt" "io" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { // From the Azure portal, get your Storage account blob service URL endpoint. accountName, accountKey := os.Getenv("AZURE_STORAGE_ACCOUNT_NAME"), os.Getenv("AZURE_STORAGE_ACCOUNT_KEY") // Create a blobClient object to a blob in the container (we assume the container & blob already exist). blobURL := fmt.Sprintf("https://%s.blob.core.windows.net/mycontainer/BigBlob.bin", accountName) credential, err := azblob.NewSharedKeyCredential(accountName, accountKey) handleError(err) blobClient, err := blob.NewClientWithSharedKeyCredential(blobURL, credential, nil) handleError(err) contentLength := int64(0) // Used for progress reporting to report the total number of bytes being downloaded. // Download returns an intelligent retryable stream around a blob; it returns an io.ReadCloser. dr, err := blobClient.DownloadStream(context.TODO(), nil) handleError(err) rs := dr.Body // NewResponseBodyProgress wraps the GetRetryStream with progress reporting; it returns an io.ReadCloser. stream := streaming.NewResponseProgress( rs, func(bytesTransferred int64) { fmt.Printf("Downloaded %d of %d bytes.\n", bytesTransferred, contentLength) }, ) defer func(stream io.ReadCloser) { err := stream.Close() if err != nil { log.Fatal(err) } }(stream) // The client must close the response body when finished with it file, err := os.Create("BigFile.bin") // Create the file to hold the downloaded blob contents. handleError(err) defer func(file *os.File) { err := file.Close() if err != nil { } }(file) written, err := io.Copy(file, stream) // Write to the file by reading from the blob (with intelligent retries). handleError(err) fmt.Printf("Wrote %d bytes.\n", written) }
Example (Client_CreateContainer)¶
Code:play
package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) resp, err := client.CreateContainer(context.TODO(), "testcontainer", &azblob.CreateContainerOptions{ Metadata: map[string]*string{"hello": to.Ptr("world")}, }) handleError(err) fmt.Println(resp) }
Example (Client_DeleteBlob)¶
Code:play
package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) resp, err := client.DeleteBlob(context.TODO(), "testcontainer", "testblob", nil) handleError(err) fmt.Println(resp) }
Example (Client_DeleteContainer)¶
Code:play
package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) resp, err := client.DeleteContainer(context.TODO(), "testcontainer", nil) handleError(err) fmt.Println(resp) }
Example (Client_DownloadFile)¶
Code:play
package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { // Set up file to download the blob to destFileName := "test_download_file.txt" destFile, err := os.Create(destFileName) handleError(err) defer func(destFile *os.File) { err = destFile.Close() handleError(err) }(destFile) accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) // Perform download _, err = client.DownloadFile(context.TODO(), "testcontainer", "virtual/dir/path/"+destFileName, destFile, &azblob.DownloadFileOptions{ // If Progress is non-nil, this function is called periodically as bytes are uploaded. Progress: func(bytesTransferred int64) { fmt.Println(bytesTransferred) }, }) // Assert download was successful handleError(err) }
Example (Client_DownloadStream)¶
Code:
{ accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) // Download the blob downloadResponse, err := client.DownloadStream(ctx, "testcontainer", "test_download_stream.bin", nil) handleError(err) // Assert that the content is correct actualBlobData, err := io.ReadAll(downloadResponse.Body) handleError(err) fmt.Println(len(actualBlobData)) }
Example (Client_NewClient)¶
Code:play
package main import ( "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { // this example uses Azure Active Directory (AAD) to authenticate with Azure Blob Storage accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) // https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DefaultAzureCredential cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) fmt.Println(client.URL()) }
Example (Client_NewClientFromConnectionString)¶
Code:play
package main
import (
"fmt"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
func handleError(err error) {
if err != nil {
log.Fatal(err.Error())
}
}
func main() {
// this example uses a connection string to authenticate with Azure Blob Storage
connectionString, ok := os.LookupEnv("AZURE_STORAGE_CONNECTION_STRING")
if !ok {
log.Fatal("the environment variable 'AZURE_STORAGE_CONNECTION_STRING' could not be found")
}
serviceClient, err := azblob.NewClientFromConnectionString(connectionString, nil)
handleError(err)
fmt.Println(serviceClient.URL())
}
Example (Client_NewClientWithSharedKeyCredential)¶
Code:play
package main import ( "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { // this example uses a shared key to authenticate with Azure Blob Storage accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } accountKey, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_KEY") if !ok { panic("AZURE_STORAGE_ACCOUNT_KEY could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) // shared key authentication requires the storage account name and access key cred, err := azblob.NewSharedKeyCredential(accountName, accountKey) handleError(err) serviceClient, err := azblob.NewClientWithSharedKeyCredential(serviceURL, cred, nil) handleError(err) fmt.Println(serviceClient.URL()) }
Example (Client_NewListBlobsPager)¶
Code:
{
accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME")
if !ok {
panic("AZURE_STORAGE_ACCOUNT_NAME could not be found")
}
serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName)
cred, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(serviceURL, cred, nil)
handleError(err)
pager := client.NewListBlobsFlatPager("testcontainer", &azblob.ListBlobsFlatOptions{
Include: container.ListBlobsInclude{Deleted: true, Versions: true},
})
for pager.More() {
resp, err := pager.NextPage(ctx)
handleError(err) // if err is not nil, break the loop.
for _, _blob := range resp.Segment.BlobItems {
fmt.Printf("%v", _blob.Name)
}
}
}
Example (Client_NewListContainersPager)¶
Code:
{
accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME")
if !ok {
panic("AZURE_STORAGE_ACCOUNT_NAME could not be found")
}
serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName)
cred, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(serviceURL, cred, nil)
handleError(err)
pager := client.NewListContainersPager(&azblob.ListContainersOptions{
Include: azblob.ListContainersInclude{Metadata: true, Deleted: true},
})
for pager.More() {
resp, err := pager.NextPage(ctx)
handleError(err) // if err is not nil, break the loop.
for _, _container := range resp.ContainerItems {
fmt.Printf("%v", _container)
}
}
}
Example (Client_UploadFile)¶
Code:play
package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { // Set up file to upload fileSize := 8 * 1024 * 1024 fileName := "test_upload_file.txt" fileData := make([]byte, fileSize) err := os.WriteFile(fileName, fileData, 0666) handleError(err) // Open the file to upload fileHandler, err := os.Open(fileName) handleError(err) // close the file after it is no longer required. defer func(file *os.File) { err = file.Close() handleError(err) }(fileHandler) // delete the local file if required. defer func(name string) { err = os.Remove(name) handleError(err) }(fileName) accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) // Upload the file to a block blob _, err = client.UploadFile(context.TODO(), "testcontainer", "virtual/dir/path/"+fileName, fileHandler, &azblob.UploadFileOptions{ BlockSize: int64(1024), Concurrency: uint16(3), // If Progress is non-nil, this function is called periodically as bytes are uploaded. Progress: func(bytesTransferred int64) { fmt.Println(bytesTransferred) }, }) handleError(err) }
Example (Client_UploadStream)¶
Code:play
package main import ( "bytes" "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") if !ok { panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") } serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) cred, err := azidentity.NewDefaultAzureCredential(nil) handleError(err) client, err := azblob.NewClient(serviceURL, cred, nil) handleError(err) // Set up test blob containerName := "testcontainer" bufferSize := 8 * 1024 * 1024 blobName := "test_upload_stream.bin" blobData := make([]byte, bufferSize) blobContentReader := bytes.NewReader(blobData) // Perform UploadStream resp, err := client.UploadStream(context.TODO(), containerName, blobName, blobContentReader, &azblob.UploadStreamOptions{ Metadata: map[string]*string{"hello": to.Ptr("world")}, }) // Assert that upload was successful handleError(err) fmt.Println(resp) }
Example (Client_anonymous_NewClientWithNoCredential)¶
Code:play
package main
import (
"fmt"
"log"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
func handleError(err error) {
if err != nil {
log.Fatal(err.Error())
}
}
func main() {
// this example uses anonymous access to access a public blob
serviceClient, err := azblob.NewClientWithNoCredential("https://azurestoragesamples.blob.core.windows.net/samples/cloud.jpg", nil)
handleError(err)
fmt.Println(serviceClient.URL())
}
Example (ProgressUploadDownload)¶
Code:play
package main import ( "bytes" "context" "fmt" "log" "os" "strings" "github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blockblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" ) func handleError(err error) { if err != nil { log.Fatal(err.Error()) } } func main() { // Create a credentials object with your Azure Storage Account name and key. accountName, accountKey := os.Getenv("AZURE_STORAGE_ACCOUNT_NAME"), os.Getenv("AZURE_STORAGE_ACCOUNT_KEY") credential, err := azblob.NewSharedKeyCredential(accountName, accountKey) handleError(err) // From the Azure portal, get your Storage account blob service URL endpoint. containerURL := fmt.Sprintf("https://%s.blob.core.windows.net/mycontainer", accountName) // Create an serviceClient object that wraps the service URL and a request pipeline to making requests. containerClient, err := container.NewClientWithSharedKeyCredential(containerURL, credential, nil) handleError(err) // Here's how to create a blob with HTTP headers and metadata (I'm using the same metadata that was put on the container): blobClient := containerClient.NewBlockBlobClient("Data.bin") // requestBody is the stream of data to write requestBody := streaming.NopCloser(strings.NewReader("Some text to write")) // Wrap the request body in a RequestBodyProgress and pass a callback function for progress reporting. requestProgress := streaming.NewRequestProgress(streaming.NopCloser(requestBody), func(bytesTransferred int64) { fmt.Printf("Wrote %d of %d bytes.", bytesTransferred, requestBody) }) _, err = blobClient.Upload(context.TODO(), requestProgress, &blockblob.UploadOptions{ HTTPHeaders: &blob.HTTPHeaders{ BlobContentType: to.Ptr("text/html; charset=utf-8"), BlobContentDisposition: to.Ptr("attachment"), }, }) handleError(err) // Here's how to read the blob's data with progress reporting: get, err := blobClient.DownloadStream(context.TODO(), nil) handleError(err) // Wrap the response body in a ResponseBodyProgress and pass a callback function for progress reporting. responseBody := streaming.NewResponseProgress( get.Body, func(bytesTransferred int64) { fmt.Printf("Read %d of %d bytes.", bytesTransferred, *get.ContentLength) }, ) downloadedData := &bytes.Buffer{} _, err = downloadedData.ReadFrom(responseBody) if err != nil { return } err = responseBody.Close() if err != nil { return } fmt.Printf("Downloaded data: %s\n", downloadedData.String()) }
Index ¶
- Constants
- type AccessConditions
- type CPKInfo
- type CPKScopeInfo
- type Client
- func NewClient(serviceURL string, cred azcore.TokenCredential, options *ClientOptions) (*Client, error)
- func NewClientFromConnectionString(connectionString string, options *ClientOptions) (*Client, error)
- func NewClientWithNoCredential(serviceURL string, options *ClientOptions) (*Client, error)
- func NewClientWithSharedKeyCredential(serviceURL string, cred *SharedKeyCredential, options *ClientOptions) (*Client, error)
- func (c *Client) CreateContainer(ctx context.Context, containerName string, o *CreateContainerOptions) (CreateContainerResponse, error)
- func (c *Client) DeleteBlob(ctx context.Context, containerName string, blobName string, o *DeleteBlobOptions) (DeleteBlobResponse, error)
- func (c *Client) DeleteContainer(ctx context.Context, containerName string, o *DeleteContainerOptions) (DeleteContainerResponse, error)
- func (c *Client) DownloadBuffer(ctx context.Context, containerName string, blobName string, buffer []byte, o *DownloadBufferOptions) (int64, error)
- func (c *Client) DownloadFile(ctx context.Context, containerName string, blobName string, file *os.File, o *DownloadFileOptions) (int64, error)
- func (c *Client) DownloadStream(ctx context.Context, containerName string, blobName string, o *DownloadStreamOptions) (DownloadStreamResponse, error)
- func (c *Client) NewListBlobsFlatPager(containerName string, o *ListBlobsFlatOptions) *runtime.Pager[ListBlobsFlatResponse]
- func (c *Client) NewListContainersPager(o *ListContainersOptions) *runtime.Pager[ListContainersResponse]
- func (c *Client) ServiceClient() *service.Client
- func (c *Client) URL() string
- func (c *Client) UploadBuffer(ctx context.Context, containerName string, blobName string, buffer []byte, o *UploadBufferOptions) (UploadBufferResponse, error)
- func (c *Client) UploadFile(ctx context.Context, containerName string, blobName string, file *os.File, o *UploadFileOptions) (UploadFileResponse, error)
- func (c *Client) UploadStream(ctx context.Context, containerName string, blobName string, body io.Reader, o *UploadStreamOptions) (UploadStreamResponse, error)
- type ClientOptions
- type CreateContainerOptions
- type CreateContainerResponse
- type DeleteBlobOptions
- type DeleteBlobResponse
- type DeleteContainerOptions
- type DeleteContainerResponse
- type DeleteSnapshotsOptionType
- type DownloadBufferOptions
- type DownloadFileOptions
- type DownloadStreamOptions
- type DownloadStreamResponse
- type HTTPRange
- type ListBlobsFlatOptions
- type ListBlobsFlatResponse
- type ListBlobsFlatSegmentResponse
- type ListBlobsInclude
- type ListContainersInclude
- type ListContainersOptions
- type ListContainersResponse
- type ListContainersSegmentResponse
- type ObjectReplicationPolicy
- type PublicAccessType
- type RetryReaderOptions
- type SharedKeyCredential
- type URLParts
- type UploadBufferOptions
- type UploadBufferResponse
- type UploadFileOptions
- type UploadFileResponse
- type UploadResponse
- type UploadStreamOptions
- type UploadStreamResponse
Examples ¶
- package
- package (Blob_AccessConditions)
- package (Blob_Client_Download)
- package (Client_CreateContainer)
- package (Client_DeleteBlob)
- package (Client_DeleteContainer)
- package (Client_DownloadFile)
- package (Client_DownloadStream)
- package (Client_NewClient)
- package (Client_NewClientFromConnectionString)
- package (Client_NewClientWithSharedKeyCredential)
- package (Client_NewListBlobsPager)
- package (Client_NewListContainersPager)
- package (Client_UploadFile)
- package (Client_UploadStream)
- package (Client_anonymous_NewClientWithNoCredential)
- package (ProgressUploadDownload)
Constants ¶
const ( // EventUpload is used for logging events related to upload operation. EventUpload = exported.EventUpload // EventSubmitBatch is used for logging events related to submit blob batch operation. EventSubmitBatch = exported.EventSubmitBatch )
Types ¶
type AccessConditions ¶
type AccessConditions = exported.BlobAccessConditions
AccessConditions identifies blob-specific access conditions which you optionally set.
type CPKInfo ¶
CPKInfo contains a group of parameters for client provided encryption key.
type CPKScopeInfo ¶
type CPKScopeInfo = container.CPKScopeInfo
CPKScopeInfo contains a group of parameters for the ContainerClient.Create method.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client represents a URL to an Azure Storage blob; the blob may be a block blob, append blob, or page blob.
func NewClient ¶
func NewClient(serviceURL string, cred azcore.TokenCredential, options *ClientOptions) (*Client, error)
NewClient creates an instance of Client with the specified values.
- serviceURL - the URL of the storage account e.g. https://<account>.blob.core.windows.net/
- cred - an Azure AD credential, typically obtained via the azidentity module
- options - client options; pass nil to accept the default values
func NewClientFromConnectionString ¶
func NewClientFromConnectionString(connectionString string, options *ClientOptions) (*Client, error)
NewClientFromConnectionString creates an instance of Client with the specified values.
- connectionString - a connection string for the desired storage account
- options - client options; pass nil to accept the default values
func NewClientWithNoCredential ¶
func NewClientWithNoCredential(serviceURL string, options *ClientOptions) (*Client, error)
NewClientWithNoCredential creates an instance of Client with the specified values. This is used to anonymously access a storage account or with a shared access signature (SAS) token.
- serviceURL - the URL of the storage account e.g. https://<account>.blob.core.windows.net/?<sas token>
- options - client options; pass nil to accept the default values
func NewClientWithSharedKeyCredential ¶
func NewClientWithSharedKeyCredential(serviceURL string, cred *SharedKeyCredential, options *ClientOptions) (*Client, error)
NewClientWithSharedKeyCredential creates an instance of Client with the specified values.
- serviceURL - the URL of the storage account e.g. https://<account>.blob.core.windows.net/
- cred - a SharedKeyCredential created with the matching storage account and access key
- options - client options; pass nil to accept the default values
func (*Client) CreateContainer ¶
func (c *Client) CreateContainer(ctx context.Context, containerName string, o *CreateContainerOptions) (CreateContainerResponse, error)
CreateContainer is a lifecycle method to creates a new container under the specified account. If the container with the same name already exists, a ContainerAlreadyExists Error will be raised. This method returns a client with which to interact with the newly created container.
func (*Client) DeleteBlob ¶
func (c *Client) DeleteBlob(ctx context.Context, containerName string, blobName string, o *DeleteBlobOptions) (DeleteBlobResponse, error)
DeleteBlob marks the specified blob or snapshot for deletion. The blob is later deleted during garbage collection. Note that deleting a blob also deletes all its snapshots. For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-blob.
func (*Client) DeleteContainer ¶
func (c *Client) DeleteContainer(ctx context.Context, containerName string, o *DeleteContainerOptions) (DeleteContainerResponse, error)
DeleteContainer is a lifecycle method that marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection. If the container is not found, a ResourceNotFoundError will be raised.
func (*Client) DownloadBuffer ¶
func (c *Client) DownloadBuffer(ctx context.Context, containerName string, blobName string, buffer []byte, o *DownloadBufferOptions) (int64, error)
DownloadBuffer downloads an Azure blob to a buffer with parallel.
func (*Client) DownloadFile ¶
func (c *Client) DownloadFile(ctx context.Context, containerName string, blobName string, file *os.File, o *DownloadFileOptions) (int64, error)
DownloadFile downloads an Azure blob to a local file. The file would be truncated if the size doesn't match.
func (*Client) DownloadStream ¶
func (c *Client) DownloadStream(ctx context.Context, containerName string, blobName string, o *DownloadStreamOptions) (DownloadStreamResponse, error)
DownloadStream reads a range of bytes from a blob. The response also includes the blob's properties and metadata. For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob.
func (*Client) NewListBlobsFlatPager ¶
func (c *Client) NewListBlobsFlatPager(containerName string, o *ListBlobsFlatOptions) *runtime.Pager[ListBlobsFlatResponse]
NewListBlobsFlatPager returns a pager for blobs starting from the specified Marker. Use an empty Marker to start enumeration from the beginning. Blob names are returned in lexicographic order. For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs.
func (*Client) NewListContainersPager ¶
func (c *Client) NewListContainersPager(o *ListContainersOptions) *runtime.Pager[ListContainersResponse]
NewListContainersPager operation returns a pager of the containers under the specified account. Use an empty Marker to start enumeration from the beginning. Container names are returned in lexicographic order. For more information, see https://docs.microsoft.com/rest/api/storageservices/list-containers2.
func (*Client) ServiceClient ¶
ServiceClient returns the embedded service client for this client.
func (*Client) URL ¶
URL returns the URL endpoint used by the BlobClient object.
func (*Client) UploadBuffer ¶
func (c *Client) UploadBuffer(ctx context.Context, containerName string, blobName string, buffer []byte, o *UploadBufferOptions) (UploadBufferResponse, error)
UploadBuffer uploads a buffer in blocks to a block blob.
func (*Client) UploadFile ¶
func (c *Client) UploadFile(ctx context.Context, containerName string, blobName string, file *os.File, o *UploadFileOptions) (UploadFileResponse, error)
UploadFile uploads a file in blocks to a block blob.
func (*Client) UploadStream ¶
func (c *Client) UploadStream(ctx context.Context, containerName string, blobName string, body io.Reader, o *UploadStreamOptions) (UploadStreamResponse, error)
UploadStream copies the file held in io.Reader to the Blob at blockBlobClient. A Context deadline or cancellation will cause this to error.
type ClientOptions ¶
type ClientOptions base.ClientOptions
ClientOptions contains the optional parameters when creating a Client.
type CreateContainerOptions ¶
type CreateContainerOptions = service.CreateContainerOptions
CreateContainerOptions contains the optional parameters for the ContainerClient.Create method.
type CreateContainerResponse ¶
type CreateContainerResponse = service.CreateContainerResponse
CreateContainerResponse contains the response from method container.Client.Create.
type DeleteBlobOptions ¶
type DeleteBlobOptions = blob.DeleteOptions
DeleteBlobOptions contains the optional parameters for the Client.Delete method.
type DeleteBlobResponse ¶
type DeleteBlobResponse = blob.DeleteResponse
DeleteBlobResponse contains the response from method blob.Client.Delete.
type DeleteContainerOptions ¶
type DeleteContainerOptions = service.DeleteContainerOptions
DeleteContainerOptions contains the optional parameters for the container.Client.Delete method.
type DeleteContainerResponse ¶
type DeleteContainerResponse = service.DeleteContainerResponse
DeleteContainerResponse contains the response from method container.Client.Delete
type DeleteSnapshotsOptionType ¶
type DeleteSnapshotsOptionType = generated.DeleteSnapshotsOptionType
DeleteSnapshotsOptionType defines values for DeleteSnapshotsOptionType.
const ( DeleteSnapshotsOptionTypeInclude DeleteSnapshotsOptionType = generated.DeleteSnapshotsOptionTypeInclude DeleteSnapshotsOptionTypeOnly DeleteSnapshotsOptionType = generated.DeleteSnapshotsOptionTypeOnly )
func PossibleDeleteSnapshotsOptionTypeValues ¶
func PossibleDeleteSnapshotsOptionTypeValues() []DeleteSnapshotsOptionType
PossibleDeleteSnapshotsOptionTypeValues returns the possible values for the DeleteSnapshotsOptionType const type.
type DownloadBufferOptions ¶
type DownloadBufferOptions = blob.DownloadBufferOptions
DownloadBufferOptions identifies options used by the DownloadBuffer and DownloadFile functions.
type DownloadFileOptions ¶
type DownloadFileOptions = blob.DownloadFileOptions
DownloadFileOptions identifies options used by the DownloadBuffer and DownloadFile functions.
type DownloadStreamOptions ¶
type DownloadStreamOptions = blob.DownloadStreamOptions
DownloadStreamOptions contains the optional parameters for the Client.DownloadStream method.
type DownloadStreamResponse ¶
type DownloadStreamResponse = blob.DownloadStreamResponse
DownloadStreamResponse wraps AutoRest generated BlobDownloadResponse and helps to provide info for retry.
type HTTPRange ¶
HTTPRange defines a range of bytes within an HTTP resource, starting at offset and ending at offset+count. A zero-value HTTPRange indicates the entire resource. An HTTPRange which has an offset and zero value count indicates from the offset to the resource's end.
type ListBlobsFlatOptions ¶
type ListBlobsFlatOptions = container.ListBlobsFlatOptions
ListBlobsFlatOptions contains the optional parameters for the container.Client.ListBlobFlatSegment method.
type ListBlobsFlatResponse ¶
type ListBlobsFlatResponse = container.ListBlobsFlatResponse
ListBlobsFlatResponse contains the response from method container.Client.ListBlobFlatSegment.
type ListBlobsFlatSegmentResponse ¶
type ListBlobsFlatSegmentResponse = generated.ListBlobsFlatSegmentResponse
ListBlobsFlatSegmentResponse - An enumeration of blobs
type ListBlobsInclude ¶
type ListBlobsInclude = container.ListBlobsInclude
ListBlobsInclude indicates what additional information the service should return with each blob.
type ListContainersInclude ¶
type ListContainersInclude = service.ListContainersInclude
ListContainersInclude indicates what additional information the service should return with each container.
type ListContainersOptions ¶
type ListContainersOptions = service.ListContainersOptions
ListContainersOptions contains the optional parameters for the container.Client.ListContainers operation
type ListContainersResponse ¶
type ListContainersResponse = service.ListContainersResponse
ListContainersResponse contains the response from method service.Client.ListContainersSegment.
type ListContainersSegmentResponse ¶
type ListContainersSegmentResponse = generated.ListContainersSegmentResponse
ListContainersSegmentResponse - An enumeration of containers
type ObjectReplicationPolicy ¶
type ObjectReplicationPolicy = blob.ObjectReplicationPolicy
ObjectReplicationPolicy are deserialized attributes
type PublicAccessType ¶
type PublicAccessType = generated.PublicAccessType
PublicAccessType defines values for AccessType - private (default) or blob or container.
const ( PublicAccessTypeBlob PublicAccessType = generated.PublicAccessTypeBlob PublicAccessTypeContainer PublicAccessType = generated.PublicAccessTypeContainer )
func PossiblePublicAccessTypeValues ¶
func PossiblePublicAccessTypeValues() []PublicAccessType
PossiblePublicAccessTypeValues returns the possible values for the PublicAccessType const type.
type RetryReaderOptions ¶
type RetryReaderOptions = blob.RetryReaderOptions
RetryReaderOptions contains properties which can help to decide when to do retry.
type SharedKeyCredential ¶
type SharedKeyCredential = exported.SharedKeyCredential
SharedKeyCredential contains an account's name and its primary or secondary key.
func NewSharedKeyCredential ¶
func NewSharedKeyCredential(accountName, accountKey string) (*SharedKeyCredential, error)
NewSharedKeyCredential creates an immutable SharedKeyCredential containing the storage account's name and either its primary or secondary key.
type URLParts ¶
URLParts object represents the components that make up an Azure Storage Container/Blob URL. NOTE: Changing any SAS-related field requires computing a new SAS signature.
func ParseURL ¶
ParseURL parses a URL initializing URLParts' fields including any SAS-related & snapshot query parameters. Any other query parameters remain in the UnparsedParams field. This method overwrites all fields in the URLParts object.
type UploadBufferOptions ¶
type UploadBufferOptions = blockblob.UploadBufferOptions
UploadBufferOptions provides set of configurations for UploadBuffer operation
type UploadBufferResponse ¶
type UploadBufferResponse = blockblob.UploadBufferResponse
UploadBufferResponse contains the response from method Client.UploadBuffer/Client.UploadFile.
type UploadFileOptions ¶
type UploadFileOptions = blockblob.UploadFileOptions
UploadFileOptions provides set of configurations for UploadFile operation
type UploadFileResponse ¶
type UploadFileResponse = blockblob.UploadFileResponse
UploadFileResponse contains the response from method Client.UploadBuffer/Client.UploadFile.
type UploadResponse ¶
type UploadResponse = blockblob.CommitBlockListResponse
UploadResponse contains the response from method blockblob.Client.CommitBlockList.
type UploadStreamOptions ¶
type UploadStreamOptions = blockblob.UploadStreamOptions
UploadStreamOptions provides set of configurations for UploadStream operation
type UploadStreamResponse ¶
type UploadStreamResponse = blockblob.CommitBlockListResponse
UploadStreamResponse contains the response from method Client.CommitBlockList.
Source Files ¶
client.go common.go constants.go doc.go log.go models.go responses.go
Directories ¶
Path | Synopsis |
---|---|
appendblob | |
blob | |
bloberror | |
blockblob | |
container | |
internal | |
lease | |
pageblob | |
sas | |
service |
- Version
- v1.6.1 (latest)
- Published
- Apr 22, 2025
- Platform
- windows/amd64
- Imports
- 14 packages
- Last checked
- now –
Tools for package owners.