Поделиться через


Управление свойствами и метаданными BLOB-объектов с помощью Go

Кроме данных, которые они содержат, BLOB-объекты поддерживают свойства системы и определяемые пользователем метаданные. В этой статье показано, как управлять свойствами системы и пользовательскими метаданными с помощью клиентского модуля служба хранилища Azure для Go.

Необходимые компоненты

Настройка среды

Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентским модулем Хранилище BLOB-объектов Azure для Go. Ниже приведены действия по установке модуля, добавлению import путей и созданию авторизованного клиентского объекта. Дополнительные сведения см. в статье "Начало работы с Хранилище BLOB-объектов Azure и Go".

Установка модулей

Установите модуль azblob с помощью следующей команды:

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

Чтобы выполнить проверку подлинности с помощью идентификатора Microsoft Entra (рекомендуется), установите azidentity модуль с помощью следующей команды:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Добавление путей импорта

В файле кода добавьте следующие пути импорта:

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

Эти пути импорта представляют собой минимальный необходимый для начала работы. В некоторых примерах кода в этой статье могут потребоваться дополнительные пути импорта. Дополнительные сведения и примеры использования см. в примерах кода.

Создание клиентского объекта

Чтобы подключить приложение к хранилищу BLOB-объектов, создайте клиентский объект с помощью azblob. NewClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential авторизации:

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

Авторизация

Механизм авторизации должен иметь необходимые разрешения для работы со свойствами контейнера или метаданными. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется), для операций получения необходимо использовать встроенное средство чтения данных BLOB-объектов хранилища ролей Azure RBAC или более поздней версии для операций получения, а также участник данных BLOB-объектов хранилища или более поздней версии для операций набора. Дополнительные сведения см. в руководстве по авторизации для задания свойств BLOB-объектов (REST API), получения свойств BLOB-объектов (REST API), задания метаданных BLOB-объектов (REST API) или получения метаданных BLOB-объектов (REST API).

Сведения о свойствах и метаданных

  • Свойства системы: свойства системы есть у каждого ресурса хранилища BLOB-объектов. Некоторые из них можно считать или задать, некоторые — только считать. На самом деле, некоторые свойства системы соответствуют определенным стандартным заголовкам HTTP. Клиентская библиотека служба хранилища Azure для Go поддерживает эти свойства.

  • Определяемые пользователем метаданные: такие метаданные состоят из одной или нескольких пар "имя-значение", которые можно указать для ресурса хранилища BLOB-объектов. Вы можете использовать метаданные для хранения дополнительных значений с помощью ресурса хранилища. Значения метаданных предназначены только для ваших собственных целей и не влияют на поведение ресурса.

    Пары имен и значений метаданных являются допустимыми HTTP-заголовками, поэтому они должны соответствовать всем ограничениям для HTTP-заголовков. Дополнительные сведения о требованиях к именованию метаданных см. в разделе "Имена метаданных".

Примечание.

Теги индекса BLOB-объектов также предоставляют возможность хранения произвольных пользовательских атрибутов ключа и значения наряду с ресурсом хранилища BLOB-объектов Azure. Аналогично метаданным только теги индекса BLOB-объектов автоматически индексируются и делаются доступными для поиска в собственной службе BLOB-объектов. Метаданные не могут индексироваться и запрашиваться, если не используется отдельная служба, например поиск Azure.

Дополнительные сведения об этой функции см. в статье Управление данными в хранилище BLOB-объектов Azure и их поиск с помощью индекса больших двоичных объектов (предварительная версия).

Задание и извлечение свойств

Чтобы задать свойства большого двоичного объекта, вызовите следующий метод из клиентского объекта большого двоичного объекта:

Все свойства, не заданные явно, очищаются. Чтобы сохранить существующие свойства, сначала можно получить свойства БОЛЬШОго двоичного объекта, а затем использовать их для заполнения заголовков, которые не обновляются.

В следующем примере кода задаются BlobContentType и BlobContentLanguage системные свойства большого двоичного объекта, сохраняя существующие свойства:

func setBlobProperties(client *azblob.Client, containerName string, blobName string) {
    // Reference the blob as a client object
    blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)

    // Get the existing blob properties
    resp, err := blobClient.GetProperties(context.TODO(), nil)
    handleError(err)

    // Set the new blob properties and include existing properties
    _, err = blobClient.SetHTTPHeaders(context.TODO(), blob.HTTPHeaders{
        BlobContentType:        to.Ptr("text/plain"),
        BlobContentLanguage:    to.Ptr("en-us"),
        BlobContentEncoding:    resp.ContentEncoding,
        BlobContentDisposition: resp.ContentDisposition,
        BlobCacheControl:       resp.CacheControl,
    }, nil)
    handleError(err)
}

Чтобы получить свойства большого двоичного объекта, вызовите следующий метод из клиентского объекта большого двоичного объекта:

Следующий пример кода получает системные свойства большого двоичного объекта и отображает некоторые значения:

func getBlobProperties(client *azblob.Client, containerName string, blobName string) {
    // Reference the blob as a client object
    blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)

    // Get the blob properties
    resp, err := blobClient.GetProperties(context.TODO(), nil)
    handleError(err)

    // Print the blob properties
    fmt.Printf("Content type: %v\n", *resp.ContentType)
    fmt.Printf("Content language: %v\n", *resp.ContentLanguage)
}

Задание и извлечение метаданных

Метаданные можно указать как одну или несколько пар "имя-значение" для BLOB-ресурса или ресурса контейнера. Чтобы задать метаданные, отправьте карту, содержащую пары "имя-значение", используя следующий метод из клиентского объекта БОЛЬШОго двоичного объекта:

В следующем примере кода задаются метаданные большого двоичного объекта:

func setBlobMetadata(client *azblob.Client, containerName string, blobName string) {
    // Reference the blob as a client object
    blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)

    // Set the blob metadata
    var metadata = make(map[string]*string)
    metadata["key1"] = to.Ptr("value1")
    metadata["key2"] = to.Ptr("value2")

    _, err := blobClient.SetMetadata(context.TODO(), metadata, nil)
    handleError(err)
}

Чтобы получить метаданные, вызовите метод GetProperties из клиентского объекта большого двоичного объекта и получите доступ к Metadata полю в ответе. Метод GetProperties извлекает свойства и метаданные большого двоичного объекта, вызывая операцию "Свойства BLOB-объектов " и операцию get BLOB-метаданных .

В следующем примере кода считываются метаданные большого двоичного объекта и выводится каждая пара "ключ-значение":

func getBlobMetadata(client *azblob.Client, containerName string, blobName string) {
    // Reference the blob as a client object
    blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)

    // Get the blob properties, which includes metadata
    resp, err := blobClient.GetProperties(context.TODO(), nil)
    handleError(err)

    // Print the blob metadata
    for k, v := range resp.Metadata {
        fmt.Printf("%v: %v\n", k, *v)
    }
}

Примечание.

Примеры кода в этом руководстве предназначены для начала работы с Хранилище BLOB-объектов Azure и Go. Необходимо изменить обработку ошибок и Context значения в соответствии с потребностями приложения.

Ресурсы

Дополнительные сведения об управлении свойствами системы и пользовательскими метаданными с помощью клиентского модуля Хранилище BLOB-объектов Azure для Go см. в следующих ресурсах.

Примеры кода

  • Просмотр примеров кода из этой статьи (GitHub)

Операции REST API

Пакет SDK Azure для Go содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы Go. Методы клиентской библиотеки для управления системными свойствами и пользовательскими метаданными используют следующие операции REST API:

Ресурсы модуля клиента

  • Эта статья является частью руководства разработчика хранилища BLOB-объектов для Go. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Go.