All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.azure.storage.blob.BlobContainerClient Maven / Gradle / Ivy

There is a newer version: 12.29.0
Show newest version
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.storage.blob;

import com.azure.core.annotation.ReturnType;
import com.azure.core.annotation.ServiceClient;
import com.azure.core.annotation.ServiceMethod;
import com.azure.core.http.HttpPipeline;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;
import com.azure.storage.blob.models.BlobContainerAccessPolicies;
import com.azure.storage.blob.models.BlobContainerProperties;
import com.azure.storage.blob.models.BlobItem;
import com.azure.storage.blob.models.BlobRequestConditions;
import com.azure.storage.blob.models.BlobSignedIdentifier;
import com.azure.storage.blob.models.CpkInfo;
import com.azure.storage.blob.models.ListBlobsOptions;
import com.azure.storage.blob.models.PublicAccessType;
import com.azure.storage.blob.models.StorageAccountInfo;
import com.azure.storage.blob.models.TaggedBlobItem;
import com.azure.storage.blob.models.UserDelegationKey;
import com.azure.storage.blob.options.BlobContainerCreateOptions;
import com.azure.storage.blob.options.FindBlobsOptions;
import com.azure.storage.blob.sas.BlobServiceSasSignatureValues;
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.storage.common.implementation.StorageImplUtils;
import reactor.core.publisher.Mono;

import java.time.Duration;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;

import static com.azure.storage.common.implementation.StorageImplUtils.blockWithOptionalTimeout;

/**
 * Client to a container. It may only be instantiated through a {@link BlobContainerClientBuilder} or via the method
 * {@link BlobServiceClient#getBlobContainerClient(String)}. This class does not hold any state about a particular
 * container but is instead a convenient way of sending off appropriate requests to the resource on the service. It may
 * also be used to construct URLs to blobs.
 *
 * 

* This client contains operations on a container. Operations on a blob are available on {@link BlobClient} through * {@link #getBlobClient(String)}, and operations on the service are available on {@link BlobServiceClient}. * *

* Please refer to the Azure * Docs for more information on containers. */ @ServiceClient(builder = BlobContainerClientBuilder.class) public final class BlobContainerClient { private final BlobContainerAsyncClient client; /** * Special container name for the root container in the Storage account. */ public static final String ROOT_CONTAINER_NAME = BlobContainerAsyncClient.ROOT_CONTAINER_NAME; /** * Special container name for the static website container in the Storage account. */ public static final String STATIC_WEBSITE_CONTAINER_NAME = BlobContainerAsyncClient.STATIC_WEBSITE_CONTAINER_NAME; /** * Special container name for the logs container in the Storage account. */ public static final String LOG_CONTAINER_NAME = BlobContainerAsyncClient.LOG_CONTAINER_NAME; /** * Package-private constructor for use by {@link BlobContainerClientBuilder}. * * @param client the async container client */ BlobContainerClient(BlobContainerAsyncClient client) { this.client = client; } /** * Initializes a new BlobClient object by concatenating blobName to the end of ContainerAsyncClient's URL. The new * BlobClient uses the same request policy pipeline as the ContainerAsyncClient. * * @param blobName A {@code String} representing the name of the blob. If the blob name contains special characters, * pass in the url encoded version of the blob name. * *

Code Samples

* * *
     * BlobClient blobClient = client.getBlobClient(blobName);
     * 
* * @return A new {@link BlobClient} object which references the blob with the specified name in this container. */ public BlobClient getBlobClient(String blobName) { return new BlobClient(client.getBlobAsyncClient(blobName)); } /** * Initializes a new BlobClient object by concatenating blobName to the end of ContainerAsyncClient's URL. The new * BlobClient uses the same request policy pipeline as the ContainerAsyncClient. * *

Code Samples

* * *
     * BlobClient blobClient = client.getBlobClient(blobName, snapshot);
     * 
* * * @param blobName A {@code String} representing the name of the blob. If the blob name contains special characters, * pass in the url encoded version of the blob name. * @param snapshot the snapshot identifier for the blob. * @return A new {@link BlobClient} object which references the blob with the specified name in this container. */ public BlobClient getBlobClient(String blobName, String snapshot) { return new BlobClient(client.getBlobAsyncClient(blobName, snapshot)); } /** * Initializes a new BlobClient object by concatenating blobName to the end of ContainerAsyncClient's URL. The new * BlobClient uses the same request policy pipeline as the ContainerAsyncClient. * * @param blobName A {@code String} representing the name of the blob. If the blob name contains special characters, * pass in the url encoded version of the blob name. * @param versionId the version identifier for the blob, pass {@code null} to interact with the latest blob version. * @return A new {@link BlobClient} object which references the blob with the specified name in this container. */ public BlobClient getBlobVersionClient(String blobName, String versionId) { return new BlobClient(client.getBlobVersionAsyncClient(blobName, versionId)); } /** * Get the container name. * *

Code Samples

* * *
     * String containerName = client.getBlobContainerName();
     * System.out.println("The name of the blob is " + containerName);
     * 
* * * @return The name of container. */ public String getBlobContainerName() { return this.client.getBlobContainerName(); } /** * Get the url of the storage account. * * @return the URL of the storage account */ public String getAccountUrl() { return this.client.getAccountUrl(); } /** * Gets the URL of the container represented by this client. * * @return the URL. */ public String getBlobContainerUrl() { return client.getBlobContainerUrl(); } /** * Get associated account name. * * @return account name associated with this storage resource. */ public String getAccountName() { return this.client.getAccountName(); } /** * Get a client pointing to the account. * * @return {@link BlobServiceClient} */ public BlobServiceClient getServiceClient() { return this.client.getServiceClientBuilder().buildClient(); } /** * Gets the service version the client is using. * * @return the service version the client is using. */ public BlobServiceVersion getServiceVersion() { return this.client.getServiceVersion(); } /** * Gets the {@link HttpPipeline} powering this client. * * @return The pipeline. */ public HttpPipeline getHttpPipeline() { return client.getHttpPipeline(); } /** * Gets the {@link CpkInfo} associated with this client that will be passed to {@link BlobClient BlobClients} when * {@link #getBlobClient(String) getBlobClient} is called. * * @return the customer provided key used for encryption. */ public CpkInfo getCustomerProvidedKey() { return client.getCustomerProvidedKey(); } /** * Gets the {@code encryption scope} used to encrypt this blob's content on the server. * * @return the encryption scope used for encryption. */ public String getEncryptionScope() { return client.getEncryptionScope(); } /** * Gets if the container this client represents exists in the cloud. * *

Code Samples

* * *
     * System.out.printf("Exists? %b%n", client.exists());
     * 
* * * @return true if the container exists, false if it doesn't */ @ServiceMethod(returns = ReturnType.SINGLE) public boolean exists() { return existsWithResponse(null, Context.NONE).getValue(); } /** * Gets if the container this client represents exists in the cloud. *

Code Samples

* * *
     * Context context = new Context("Key", "Value");
     * System.out.printf("Exists? %b%n", client.existsWithResponse(timeout, context).getValue());
     * 
* * * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return true if the container exists, false if it doesn't */ @ServiceMethod(returns = ReturnType.SINGLE) public Response existsWithResponse(Duration timeout, Context context) { Mono> response = client.existsWithResponse(context); return blockWithOptionalTimeout(response, timeout); } /** * Creates a new container within a storage account. If a container with the same name already exists, the operation * fails. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * try {
     *     client.create();
     *     System.out.printf("Create completed%n");
     * } catch (BlobStorageException error) {
     *     if (error.getErrorCode().equals(BlobErrorCode.CONTAINER_ALREADY_EXISTS)) {
     *         System.out.printf("Can't create container. It already exists %n");
     *     }
     * }
     * 
* */ @ServiceMethod(returns = ReturnType.SINGLE) public void create() { createWithResponse(null, null, null, Context.NONE); } /** * Creates a new container within a storage account. If a container with the same name already exists, the operation * fails. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * Map<String, String> metadata = Collections.singletonMap("metadata", "value");
     * Context context = new Context("Key", "Value");
     *
     * System.out.printf("Create completed with status %d%n",
     *     client.createWithResponse(metadata, PublicAccessType.CONTAINER, timeout, context).getStatusCode());
     * 
* * * @param metadata Metadata to associate with the container. If there is leading or trailing whitespace in any * metadata key or value, it must be removed or encoded. * @param accessType Specifies how the data in this container is available to the public. See the * x-ms-blob-public-access header in the Azure Docs for more information. Pass null for no public access. * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A response containing status code and HTTP headers */ @ServiceMethod(returns = ReturnType.SINGLE) public Response createWithResponse(Map metadata, PublicAccessType accessType, Duration timeout, Context context) { Mono> response = client.createWithResponse(metadata, accessType, context); return blockWithOptionalTimeout(response, timeout); } /** * Creates a new container within a storage account if it does not exist. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * boolean result = client.createIfNotExists();
     * System.out.println("Create completed: " + result);
     * 
* * * @return {@code true} if container is successfully created, {@code false} if container already exists. */ @ServiceMethod(returns = ReturnType.SINGLE) public boolean createIfNotExists() { return createIfNotExistsWithResponse(null, null, null).getValue(); } /** * Creates a new container within a storage account if it does not exist. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * Map<String, String> metadata = Collections.singletonMap("metadata", "value");
     * Context context = new Context("Key", "Value");
     * BlobContainerCreateOptions options = new BlobContainerCreateOptions().setMetadata(metadata)
     *     .setPublicAccessType(PublicAccessType.CONTAINER);
     *
     * Response<Boolean> response = client.createIfNotExistsWithResponse(options, timeout, context);
     * if (response.getStatusCode() == 409) {
     *     System.out.println("Already existed.");
     * } else {
     *     System.out.printf("Create completed with status %d%n", response.getStatusCode());
     * }
     * 
* * * @param options {@link BlobContainerCreateOptions} * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A response containing status code and HTTP headers. If {@link Response}'s status code is 201, a new * container was successfully created. If status code is 409, a container already existed at this location. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response createIfNotExistsWithResponse(BlobContainerCreateOptions options, Duration timeout, Context context) { return StorageImplUtils.blockWithOptionalTimeout(client. createIfNotExistsWithResponse(options, context), timeout); } /** * Marks the specified container for deletion. The container and any blobs contained within it are later deleted * during garbage collection. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * try {
     *     client.delete();
     *     System.out.printf("Delete completed%n");
     * } catch (BlobStorageException error) {
     *     if (error.getErrorCode().equals(BlobErrorCode.CONTAINER_NOT_FOUND)) {
     *         System.out.printf("Delete failed. Container was not found %n");
     *     }
     * }
     * 
* */ @ServiceMethod(returns = ReturnType.SINGLE) public void delete() { deleteWithResponse(null, null, Context.NONE); } /** * Marks the specified container for deletion. The container and any blobs contained within it are later deleted * during garbage collection. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobRequestConditions requestConditions = new BlobRequestConditions()
     *     .setLeaseId(leaseId)
     *     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
     * Context context = new Context("Key", "Value");
     *
     * System.out.printf("Delete completed with status %d%n", client.deleteWithResponse(
     *     requestConditions, timeout, context).getStatusCode());
     * 
* * * @param requestConditions {@link BlobRequestConditions} * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A response containing status code and HTTP headers */ @ServiceMethod(returns = ReturnType.SINGLE) public Response deleteWithResponse(BlobRequestConditions requestConditions, Duration timeout, Context context) { Mono> response = client.deleteWithResponse(requestConditions, context); return blockWithOptionalTimeout(response, timeout); } /** * Marks the specified container for deletion if it exists. The container and any blobs contained within * it are later deleted during garbage collection. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * boolean result = client.deleteIfExists();
     * System.out.println("Delete completed: " + result);
     * 
* * @return {@code true} if container is successfully deleted, {@code false} if container does not exist. */ @ServiceMethod(returns = ReturnType.SINGLE) public boolean deleteIfExists() { return deleteIfExistsWithResponse(null, null, Context.NONE).getValue(); } /** * Marks the specified container for deletion if it exists. The container and any blobs contained within it * are later deleted during garbage collection. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobRequestConditions requestConditions = new BlobRequestConditions()
     *     .setLeaseId(leaseId)
     *     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
     * Context context = new Context("Key", "Value");
     *
     * Response<Boolean> response = client.deleteIfExistsWithResponse(requestConditions, timeout, context);
     * if (response.getStatusCode() == 404) {
     *     System.out.println("Does not exist.");
     * } else {
     *     System.out.printf("Delete completed with status %d%n", response.getStatusCode());
     * }
     * 
* * * @param requestConditions {@link BlobRequestConditions} * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A response containing status code and HTTP headers. If {@link Response}'s status code is 202, the container * was successfully deleted. If status code is 404, the container does not exist. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response deleteIfExistsWithResponse(BlobRequestConditions requestConditions, Duration timeout, Context context) { return blockWithOptionalTimeout(client.deleteIfExistsWithResponse(requestConditions, context), timeout); } /** * Returns the container's metadata and system properties. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobContainerProperties properties = client.getProperties();
     * System.out.printf("Public Access Type: %s, Legal Hold? %b, Immutable? %b%n",
     *     properties.getBlobPublicAccess(),
     *     properties.hasLegalHold(),
     *     properties.hasImmutabilityPolicy());
     * 
* * * @return The container properties. */ @ServiceMethod(returns = ReturnType.SINGLE) public BlobContainerProperties getProperties() { return getPropertiesWithResponse(null, null, Context.NONE).getValue(); } /** * Returns the container's metadata and system properties. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * Context context = new Context("Key", "Value");
     *
     * BlobContainerProperties properties = client.getPropertiesWithResponse(leaseId, timeout, context)
     *     .getValue();
     * System.out.printf("Public Access Type: %s, Legal Hold? %b, Immutable? %b%n",
     *     properties.getBlobPublicAccess(),
     *     properties.hasLegalHold(),
     *     properties.hasImmutabilityPolicy());
     * 
* * * @param leaseId The lease ID the active lease on the container must match. * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return The container properties. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getPropertiesWithResponse(String leaseId, Duration timeout, Context context) { return blockWithOptionalTimeout(client.getPropertiesWithResponse(leaseId, context), timeout); } /** * Sets the container's metadata. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * Map<String, String> metadata = Collections.singletonMap("metadata", "value");
     * try {
     *     client.setMetadata(metadata);
     *     System.out.printf("Set metadata completed with status %n");
     * } catch (UnsupportedOperationException error) {
     *     System.out.printf("Fail while setting metadata %n");
     * }
     * 
* * * @param metadata Metadata to associate with the container. If there is leading or trailing whitespace in any * metadata key or value, it must be removed or encoded. */ @ServiceMethod(returns = ReturnType.SINGLE) public void setMetadata(Map metadata) { setMetadataWithResponse(metadata, null, null, Context.NONE); } /** * Sets the container's metadata. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * Map<String, String> metadata = Collections.singletonMap("metadata", "value");
     * BlobRequestConditions requestConditions = new BlobRequestConditions()
     *     .setLeaseId(leaseId)
     *     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
     * Context context = new Context("Key", "Value");
     *
     * System.out.printf("Set metadata completed with status %d%n",
     *     client.setMetadataWithResponse(metadata, requestConditions, timeout, context).getStatusCode());
     * 
* * @param metadata Metadata to associate with the container. If there is leading or trailing whitespace in any * metadata key or value, it must be removed or encoded. * @param requestConditions {@link BlobRequestConditions} * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A response containing status code and HTTP headers */ @ServiceMethod(returns = ReturnType.SINGLE) public Response setMetadataWithResponse(Map metadata, BlobRequestConditions requestConditions, Duration timeout, Context context) { Mono> response = client.setMetadataWithResponse(metadata, requestConditions, context); return blockWithOptionalTimeout(response, timeout); } /** * Returns the container's permissions. The permissions indicate whether container's blobs may be accessed publicly. * For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobContainerAccessPolicies accessPolicies = client.getAccessPolicy();
     * System.out.printf("Blob Access Type: %s%n", accessPolicies.getBlobAccessType());
     *
     * for (BlobSignedIdentifier identifier : accessPolicies.getIdentifiers()) {
     *     System.out.printf("Identifier Name: %s, Permissions %s%n",
     *         identifier.getId(),
     *         identifier.getAccessPolicy().getPermissions());
     * }
     * 
* * * @return The container access policy. */ @ServiceMethod(returns = ReturnType.SINGLE) public BlobContainerAccessPolicies getAccessPolicy() { return getAccessPolicyWithResponse(null, null, Context.NONE).getValue(); } /** * Returns the container's permissions. The permissions indicate whether container's blobs may be accessed publicly. * For more information, see the * Azure Docs. * *

Code Samples

* * *
     * Context context = new Context("Key", "Value");
     * BlobContainerAccessPolicies accessPolicies = client.getAccessPolicyWithResponse(leaseId, timeout, context)
     *     .getValue();
     * System.out.printf("Blob Access Type: %s%n", accessPolicies.getBlobAccessType());
     *
     * for (BlobSignedIdentifier identifier : accessPolicies.getIdentifiers()) {
     *     System.out.printf("Identifier Name: %s, Permissions %s%n",
     *         identifier.getId(),
     *         identifier.getAccessPolicy().getPermissions());
     * }
     * 
* * * @param leaseId The lease ID the active lease on the container must match. * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return The container access policy. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getAccessPolicyWithResponse(String leaseId, Duration timeout, Context context) { return blockWithOptionalTimeout(client.getAccessPolicyWithResponse(leaseId, context), timeout); } /** * Sets the container's permissions. The permissions indicate whether blobs in a container may be accessed publicly. * Note that, for each signed identifier, we will truncate the start and expiry times to the nearest second to * ensure the time formatting is compatible with the service. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobSignedIdentifier identifier = new BlobSignedIdentifier()
     *     .setId("name")
     *     .setAccessPolicy(new BlobAccessPolicy()
     *         .setStartsOn(OffsetDateTime.now())
     *         .setExpiresOn(OffsetDateTime.now().plusDays(7))
     *         .setPermissions("permissionString"));
     *
     * try {
     *     client.setAccessPolicy(PublicAccessType.CONTAINER, Collections.singletonList(identifier));
     *     System.out.printf("Set Access Policy completed %n");
     * } catch (UnsupportedOperationException error) {
     *     System.out.printf("Set Access Policy completed %s%n", error);
     * }
     * 
* * * @param accessType Specifies how the data in this container is available to the public. See the * x-ms-blob-public-access header in the Azure Docs for more information. Pass null for no public access. * @param identifiers A list of {@link BlobSignedIdentifier} objects that specify the permissions for the container. * Please see * here * for more information. Passing null will clear all access policies. */ @ServiceMethod(returns = ReturnType.SINGLE) public void setAccessPolicy(PublicAccessType accessType, List identifiers) { setAccessPolicyWithResponse(accessType, identifiers, null, null, Context.NONE); } /** * Sets the container's permissions. The permissions indicate whether blobs in a container may be accessed publicly. * Note that, for each signed identifier, we will truncate the start and expiry times to the nearest second to * ensure the time formatting is compatible with the service. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobSignedIdentifier identifier = new BlobSignedIdentifier()
     *     .setId("name")
     *     .setAccessPolicy(new BlobAccessPolicy()
     *         .setStartsOn(OffsetDateTime.now())
     *         .setExpiresOn(OffsetDateTime.now().plusDays(7))
     *         .setPermissions("permissionString"));
     *
     * BlobRequestConditions requestConditions = new BlobRequestConditions()
     *     .setLeaseId(leaseId)
     *     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
     *
     * Context context = new Context("Key", "Value");
     *
     * System.out.printf("Set access policy completed with status %d%n",
     *     client.setAccessPolicyWithResponse(PublicAccessType.CONTAINER,
     *         Collections.singletonList(identifier),
     *         requestConditions,
     *         timeout,
     *         context).getStatusCode());
     * 
* * * @param accessType Specifies how the data in this container is available to the public. See the * x-ms-blob-public-access header in the Azure Docs for more information. Pass null for no public access. * @param identifiers A list of {@link BlobSignedIdentifier} objects that specify the permissions for the container. * Please see * here * for more information. Passing null will clear all access policies. * @param requestConditions {@link BlobRequestConditions} * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A response containing status code and HTTP headers */ @ServiceMethod(returns = ReturnType.SINGLE) public Response setAccessPolicyWithResponse(PublicAccessType accessType, List identifiers, BlobRequestConditions requestConditions, Duration timeout, Context context) { Mono> response = client .setAccessPolicyWithResponse(accessType, identifiers, requestConditions, context); return blockWithOptionalTimeout(response, timeout); } /** * Returns a lazy loaded list of blobs in this container, with folder structures flattened. The returned {@link * PagedIterable} can be consumed through while new items are automatically retrieved as needed. * *

* Blob names are returned in lexicographic order. * *

* For more information, see the * Azure Docs. * *

Code Samples

* * *
     * client.listBlobs().forEach(blob ->
     *     System.out.printf("Name: %s, Directory? %b%n", blob.getName(), blob.isPrefix()));
     * 
* * * @return The listed blobs, flattened. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable listBlobs() { return this.listBlobs(new ListBlobsOptions(), null); } /** * Returns a lazy loaded list of blobs in this container, with folder structures flattened. The returned {@link * PagedIterable} can be consumed through while new items are automatically retrieved as needed. * *

* Blob names are returned in lexicographic order. * *

* For more information, see the * Azure Docs. * *

Code Samples

* * *
     * ListBlobsOptions options = new ListBlobsOptions()
     *     .setPrefix("prefixToMatch")
     *     .setDetails(new BlobListDetails()
     *         .setRetrieveDeletedBlobs(true)
     *         .setRetrieveSnapshots(true));
     *
     * client.listBlobs(options, timeout).forEach(blob ->
     *     System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
     *         blob.getName(),
     *         blob.isPrefix(),
     *         blob.isDeleted(),
     *         blob.getSnapshot()));
     * 
* * * @param options {@link ListBlobsOptions}. If iterating by page, the page size passed to byPage methods such as * {@link PagedIterable#iterableByPage(int)} will be preferred over the value set on these options. * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @return The listed blobs, flattened. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable listBlobs(ListBlobsOptions options, Duration timeout) { return this.listBlobs(options, null, timeout); } /** * Returns a lazy loaded list of blobs in this container, with folder structures flattened. The returned {@link * PagedIterable} can be consumed through while new items are automatically retrieved as needed. * *

* Blob names are returned in lexicographic order. * *

* For more information, see the * Azure Docs. * *

Code Samples

* * *
     * ListBlobsOptions options = new ListBlobsOptions()
     *     .setPrefix("prefixToMatch")
     *     .setDetails(new BlobListDetails()
     *         .setRetrieveDeletedBlobs(true)
     *         .setRetrieveSnapshots(true));
     *
     * String continuationToken = "continuationToken";
     *
     * client.listBlobs(options, continuationToken, timeout).forEach(blob ->
     *     System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
     *         blob.getName(),
     *         blob.isPrefix(),
     *         blob.isDeleted(),
     *         blob.getSnapshot()));
     * 
* * * @param options {@link ListBlobsOptions}. If iterating by page, the page size passed to byPage methods such as * {@link PagedIterable#iterableByPage(int)} will be preferred over the value set on these options. * @param continuationToken Identifies the portion of the list to be returned with the next list operation. * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @return The listed blobs, flattened. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable listBlobs(ListBlobsOptions options, String continuationToken, Duration timeout) { return new PagedIterable<>(client.listBlobsFlatWithOptionalTimeout(options, continuationToken, timeout)); } /** * Returns a reactive Publisher emitting all the blobs and directories (prefixes) under the given directory * (prefix). Directories will have {@link BlobItem#isPrefix()} set to true. * *

* Blob names are returned in lexicographic order. For more information, see the * Azure Docs. * *

* E.g. listing a container containing a 'foo' folder, which contains blobs 'foo1' and 'foo2', and a blob on the * root level 'bar', will return the following results when prefix=null: * *

    *
  • foo/ (isPrefix = true) *
  • bar (isPrefix = false) *
*

* will return the following results when prefix="foo/": * *

    *
  • foo/foo1 (isPrefix = false) *
  • foo/foo2 (isPrefix = false) *
* *

Code Samples

* * *
     * client.listBlobsByHierarchy("directoryName").forEach(blob ->
     *     System.out.printf("Name: %s, Directory? %b%n", blob.getName(), blob.isPrefix()));
     * 
* * * @param directory The directory to list blobs underneath * @return A reactive response emitting the prefixes and blobs. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable listBlobsByHierarchy(String directory) { return this.listBlobsByHierarchy("/", new ListBlobsOptions().setPrefix(directory), null); } /** * Returns a reactive Publisher emitting all the blobs and prefixes (directories) under the given prefix * (directory). Directories will have {@link BlobItem#isPrefix()} set to true. * *

* Blob names are returned in lexicographic order. For more information, see the * Azure Docs. * *

* E.g. listing a container containing a 'foo' folder, which contains blobs 'foo1' and 'foo2', and a blob on the * root level 'bar', will return the following results when prefix=null: * *

    *
  • foo/ (isPrefix = true) *
  • bar (isPrefix = false) *
*

* will return the following results when prefix="foo/": * *

    *
  • foo/foo1 (isPrefix = false) *
  • foo/foo2 (isPrefix = false) *
* *

Code Samples

* * *
     * ListBlobsOptions options = new ListBlobsOptions()
     *     .setPrefix("directoryName")
     *     .setDetails(new BlobListDetails()
     *         .setRetrieveDeletedBlobs(true)
     *         .setRetrieveSnapshots(false));
     *
     * client.listBlobsByHierarchy("/", options, timeout).forEach(blob ->
     *     System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
     *         blob.getName(),
     *         blob.isPrefix(),
     *         blob.isDeleted(),
     *         blob.getSnapshot()));
     * 
* * * @param delimiter The delimiter for blob hierarchy, "/" for hierarchy based on directories * @param options {@link ListBlobsOptions}. If iterating by page, the page size passed to byPage methods such as * {@link PagedIterable#iterableByPage(int)} will be preferred over the value set on these options. * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @return A reactive response emitting the prefixes and blobs. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable listBlobsByHierarchy(String delimiter, ListBlobsOptions options, Duration timeout) { return new PagedIterable<>(client .listBlobsHierarchyWithOptionalTimeout(delimiter, options, timeout)); } /** * Returns a lazy loaded list of blobs in this container whose tags match the query expression. The returned * {@link PagedIterable} can be consumed while new items are automatically retrieved as needed. For more * information, including information on the query syntax, see the Azure Docs. * *

Code Samples

* * TODO * *
     * client.findBlobsByTags("where=tag=value").forEach(blob -> System.out.printf("Name: %s%n", blob.getName()));
     * 
* * * @param query Filters the results to return only blobs whose tags match the specified expression. * @return The list of blobs. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable findBlobsByTags(String query) { return this.findBlobsByTags(new FindBlobsOptions(query), null, Context.NONE); } /** * Returns a lazy loaded list of blobs in this account whose tags match the query expression. The returned * {@link PagedIterable} can be consumed while new items are automatically retrieved as needed. For more * information, including information on the query syntax, see the Azure Docs. * *

Code Samples

* * *
     * Context context = new Context("Key", "Value");
     * client.findBlobsByTags(new FindBlobsOptions("where=tag=value").setMaxResultsPerPage(10), timeout, context)
     *     .forEach(blob -> System.out.printf("Name: %s%n", blob.getName()));
     * 
* * * @param options {@link FindBlobsOptions}. If iterating by page, the page size passed to byPage methods such as * {@link PagedIterable#iterableByPage(int)} will be preferred over the value set on these options. * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return The list of blobs. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable findBlobsByTags(FindBlobsOptions options, Duration timeout, Context context) { return new PagedIterable<>(client.findBlobsByTags(options, timeout, context)); } /** * Returns the sku name and account kind for the account. For more information, please see the * Azure Docs. * * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * *

Code Samples

* * *
     * StorageAccountInfo accountInfo = client.getAccountInfo(timeout);
     * System.out.printf("Account Kind: %s, SKU: %s%n", accountInfo.getAccountKind(), accountInfo.getSkuName());
     * 
* * @return The account info. */ @ServiceMethod(returns = ReturnType.SINGLE) public StorageAccountInfo getAccountInfo(Duration timeout) { return getAccountInfoWithResponse(timeout, Context.NONE).getValue(); } /** * Returns the sku name and account kind for the account. For more information, please see the * Azure Docs. * *

Code Samples

* * *
     * Context context = new Context("Key", "Value");
     * StorageAccountInfo accountInfo = client.getAccountInfoWithResponse(timeout, context).getValue();
     * System.out.printf("Account Kind: %s, SKU: %s%n", accountInfo.getAccountKind(), accountInfo.getSkuName());
     * 
* * * @param timeout An optional timeout value beyond which a {@link RuntimeException} will be raised. * @param context Additional context that is passed through the Http pipeline during the service call. * @return The account info. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getAccountInfoWithResponse(Duration timeout, Context context) { Mono> response = client.getAccountInfoWithResponse(context); return blockWithOptionalTimeout(response, timeout); } // TODO: Reintroduce this API once service starts supporting it. // BlobContainerClient rename(String destinationContainerName) { // return renameWithResponse(new BlobContainerRenameOptions(destinationContainerName // ), null, Context.NONE).getValue(); // } // TODO: Reintroduce this API once service starts supporting it. // Response renameWithResponse(BlobContainerRenameOptions options, Duration timeout, // Context context) { // Mono> response = this.client.renameWithResponse(options, context) // .map(r -> new SimpleResponse<>(r, new BlobContainerClient(r.getValue()))); // // return StorageImplUtils.blockWithOptionalTimeout(response, timeout); // } /** * Generates a user delegation SAS for the container using the specified {@link BlobServiceSasSignatureValues}. *

See {@link BlobServiceSasSignatureValues} for more information on how to construct a user delegation SAS.

* *

Code Samples

* * *
     * OffsetDateTime myExpiryTime = OffsetDateTime.now().plusDays(1);
     * BlobContainerSasPermission myPermission = new BlobContainerSasPermission().setReadPermission(true);
     *
     * BlobServiceSasSignatureValues myValues = new BlobServiceSasSignatureValues(expiryTime, permission)
     *     .setStartTime(OffsetDateTime.now());
     *
     * client.generateUserDelegationSas(values, userDelegationKey);
     * 
* * * @param blobServiceSasSignatureValues {@link BlobServiceSasSignatureValues} * @param userDelegationKey A {@link UserDelegationKey} object used to sign the SAS values. * See {@link BlobServiceClient#getUserDelegationKey(OffsetDateTime, OffsetDateTime)} for more information on * how to get a user delegation key. * * @return A {@code String} representing the SAS query parameters. */ public String generateUserDelegationSas(BlobServiceSasSignatureValues blobServiceSasSignatureValues, UserDelegationKey userDelegationKey) { return this.client.generateUserDelegationSas(blobServiceSasSignatureValues, userDelegationKey); } /** * Generates a user delegation SAS for the container using the specified {@link BlobServiceSasSignatureValues}. *

See {@link BlobServiceSasSignatureValues} for more information on how to construct a user delegation SAS.

* *

Code Samples

* * *
     * OffsetDateTime myExpiryTime = OffsetDateTime.now().plusDays(1);
     * BlobContainerSasPermission myPermission = new BlobContainerSasPermission().setReadPermission(true);
     *
     * BlobServiceSasSignatureValues myValues = new BlobServiceSasSignatureValues(expiryTime, permission)
     *     .setStartTime(OffsetDateTime.now());
     *
     * client.generateUserDelegationSas(values, userDelegationKey, accountName, new Context("key", "value"));
     * 
* * * @param blobServiceSasSignatureValues {@link BlobServiceSasSignatureValues} * @param userDelegationKey A {@link UserDelegationKey} object used to sign the SAS values. * See {@link BlobServiceClient#getUserDelegationKey(OffsetDateTime, OffsetDateTime)} for more information on * how to get a user delegation key.. * @param accountName The account name. * @param context Additional context that is passed through the code when generating a SAS. * * @return A {@code String} representing the SAS query parameters. */ public String generateUserDelegationSas(BlobServiceSasSignatureValues blobServiceSasSignatureValues, UserDelegationKey userDelegationKey, String accountName, Context context) { return this.client.generateUserDelegationSas(blobServiceSasSignatureValues, userDelegationKey, accountName, context); } /** * Generates a service SAS for the container using the specified {@link BlobServiceSasSignatureValues} *

Note : The client must be authenticated via {@link StorageSharedKeyCredential} *

See {@link BlobServiceSasSignatureValues} for more information on how to construct a service SAS.

* *

Code Samples

* * *
     * OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
     * BlobContainerSasPermission permission = new BlobContainerSasPermission().setReadPermission(true);
     *
     * BlobServiceSasSignatureValues values = new BlobServiceSasSignatureValues(expiryTime, permission)
     *     .setStartTime(OffsetDateTime.now());
     *
     * client.generateSas(values); // Client must be authenticated via StorageSharedKeyCredential
     * 
* * * @param blobServiceSasSignatureValues {@link BlobServiceSasSignatureValues} * * @return A {@code String} representing the SAS query parameters. */ public String generateSas(BlobServiceSasSignatureValues blobServiceSasSignatureValues) { return this.client.generateSas(blobServiceSasSignatureValues); } /** * Generates a service SAS for the container using the specified {@link BlobServiceSasSignatureValues} *

Note : The client must be authenticated via {@link StorageSharedKeyCredential} *

See {@link BlobServiceSasSignatureValues} for more information on how to construct a service SAS.

* *

Code Samples

* * *
     * OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
     * BlobContainerSasPermission permission = new BlobContainerSasPermission().setReadPermission(true);
     *
     * BlobServiceSasSignatureValues values = new BlobServiceSasSignatureValues(expiryTime, permission)
     *     .setStartTime(OffsetDateTime.now());
     *
     * // Client must be authenticated via StorageSharedKeyCredential
     * client.generateSas(values, new Context("key", "value"));
     * 
* * * @param blobServiceSasSignatureValues {@link BlobServiceSasSignatureValues} * @param context Additional context that is passed through the code when generating a SAS. * * @return A {@code String} representing the SAS query parameters. */ public String generateSas(BlobServiceSasSignatureValues blobServiceSasSignatureValues, Context context) { return this.client.generateSas(blobServiceSasSignatureValues, context); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy