你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Java 管理 blob 属性和元数据

除 Blob 包含的数据外,它们还支持系统属性和用户定义的元数据。 本文介绍如何使用用于 Java 的 Azure 存储客户端库管理系统属性和用户定义元数据。

先决条件

关于属性和元数据

  • 系统属性:系统属性存在于每个 Blob 存储资源上。 其中一些属性是可以读取或设置的,而另一些属性是只读的。 事实上,有些系统属性与某些标准 HTTP 标头对应。 用于 Java 的 Azure 存储客户端库将维护这些属性。

  • 用户定义的元数据:用户定义元数据包含一个或多个你为 Blob 存储资源指定的名称/值对对。 可以使用元数据存储资源的其他值。 元数据值仅用于你自己的目的,不会影响资源的行为方式。

    元数据名称/值对是有效的 HTTP 标头,因此应当遵循所有控制 HTTP 标头的限制。 有关元数据命名要求的详细信息,请参阅元数据名称

注意

使用 Blob 索引标记,还可以将任意用户定义的键/值属性与 Azure Blob 存储资源一起存储。 虽然与元数据类似,但只会自动为 Blob 索引标记编制索引,并由本机的 blob 服务进行搜索。 除非使用了单独的服务(如 Azure 搜索),否则无法对元数据进行索引和查询。

若要详细了解此功能,请参阅通过 Blob 索引管理和查找 Azure Blob 存储上的数据

设置和检索属性

若要在 blob 上设置属性,请使用以下方法:

以下代码示例设置 blob 的 ContentTypeContentLanguage 系统属性。

清除未显式设置的任何属性。 下面的代码示例首先获取 Blob 上的现有属性,然后使用它们填充未更新的标头。

public void setBlobProperties(BlobClient blobClient) {
    BlobProperties properties = blobClient.getProperties();

    // Set the ContentLanguage and ContentType headers, and populate the remaining
    // headers from the existing properties
    BlobHttpHeaders blobHeaders = new BlobHttpHeaders()
            .setContentLanguage("en-us")
            .setContentType("text/plain")
            .setCacheControl(properties.getCacheControl())
            .setContentDisposition(properties.getContentDisposition())
            .setContentEncoding(properties.getContentEncoding())
            .setContentMd5(properties.getContentMd5());

    blobClient.setHttpHeaders(blobHeaders);
    System.out.println("Set HTTP headers completed");
}

若要检索 blob 上的属性,请使用以下方法:

以下代码示例获取 blob 的系统属性并显示一些值:

public void getBlobProperties(BlobClient blobClient) {
    BlobProperties properties = blobClient.getProperties();

    System.out.printf("BlobType: %s%n", properties.getBlobType());
    System.out.printf("BlobSize: %d%n", properties.getBlobSize());
    System.out.printf("ContentLanguage: %s%n", properties.getContentLanguage());
    System.out.printf("ContentType: %s%n", properties.getContentType());
}

设置和检索元数据

可将元数据指定为 Blob 或容器资源上的一个或多个名称/值对。 若要设置元数据,请使用以下方法发送包含名称/值对的 Map 对象:

以下代码示例在 blob 上设置元数据:

public void addBlobMetadata(BlobClient blobClient) {
    Map<String, String> metadata = new HashMap<String, String>();
    metadata.put("docType", "text");
    metadata.put("category", "reference");

    try {
        blobClient.setMetadata(metadata);
        System.out.printf("Set metadata completed %n");
    } catch (UnsupportedOperationException error) {
        System.out.printf("Failure while setting metadata %n");
    }
}

要检索元数据,请对 blob 调用 getProperties 方法以填充元数据集合,然后读取值,如下面的示例所示。 getProperties 方法通过调用获取 Blob 属性操作和获取 Blob 元数据操作来检索 blob 属性和元数据。

下面的代码示例读取有关 blob 的元数据并打印每个键/值对:

public void readBlobMetadata(BlobClient blobClient) {
    // Get blob properties and metadata
    BlobProperties properties = blobClient.getProperties();

    System.out.printf("Blob metadata: %n");
    properties.getMetadata().entrySet().forEach(metadataItem -> {
        System.out.printf(" %s = %s%n", metadataItem.getKey(), metadataItem.getValue());
    });
}

资源

若要详细了解如何使用适用于 Java 的 Azure Blob 存储客户端库管理系统属性和用户定义的元数据,请参阅以下资源。

REST API 操作

Azure SDK for Java 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 Java 范例与 REST API 操作进行交互。 用于管理系统属性和用户定义的元数据的客户端库方法使用以下 REST API 操作:

代码示例

客户端库资源