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

com.azure.storage.blob.BlobServiceClient 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.credential.TokenCredential;
import com.azure.core.http.HttpPipeline;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.Response;
import com.azure.core.http.rest.SimpleResponse;
import com.azure.core.util.Context;
import com.azure.storage.blob.models.BlobContainerItem;
import com.azure.storage.blob.models.BlobServiceProperties;
import com.azure.storage.blob.models.BlobServiceStatistics;
import com.azure.storage.blob.models.ListBlobContainersOptions;
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.options.UndeleteBlobContainerOptions;
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.storage.common.implementation.StorageImplUtils;
import com.azure.storage.common.sas.AccountSasSignatureValues;
import reactor.core.publisher.Mono;

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

/**
 * Client to a storage account. It may only be instantiated through a {@link BlobServiceClientBuilder}. This class does
 * not hold any state about a particular storage account 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 and containers.
 *
 * 

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

* Please see here for more * information on containers. */ @ServiceClient(builder = BlobServiceClientBuilder.class) public final class BlobServiceClient { private final BlobServiceAsyncClient blobServiceAsyncClient; /** * Package-private constructor for use by {@link BlobServiceClientBuilder}. * * @param blobServiceAsyncClient the async storage account client */ BlobServiceClient(BlobServiceAsyncClient blobServiceAsyncClient) { this.blobServiceAsyncClient = blobServiceAsyncClient; } /** * Initializes a {@link BlobContainerClient} object pointing to the specified container. This method does not create * a container. It simply constructs the URL to the container and offers access to methods relevant to containers. * *

Code Samples

* * *
     * BlobContainerClient blobContainerClient = client.getBlobContainerClient("containerName");
     * 
* * * @param containerName The name of the container to point to. * @return A {@link BlobContainerClient} object pointing to the specified container */ public BlobContainerClient getBlobContainerClient(String containerName) { return new BlobContainerClient(blobServiceAsyncClient.getBlobContainerAsyncClient(containerName)); } /** * Gets the {@link HttpPipeline} powering this client. * * @return The pipeline. */ public HttpPipeline getHttpPipeline() { return blobServiceAsyncClient.getHttpPipeline(); } /** * Gets the service version the client is using. * * @return the service version the client is using. */ public BlobServiceVersion getServiceVersion() { return this.blobServiceAsyncClient.getServiceVersion(); } /** * 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

* * *
     * BlobContainerClient blobContainerClient = client.createBlobContainer("containerName");
     * 
* * * @param containerName Name of the container to create * @return The {@link BlobContainerClient} used to interact with the container created. */ @ServiceMethod(returns = ReturnType.SINGLE) public BlobContainerClient createBlobContainer(String containerName) { return createBlobContainerWithResponse(containerName, null, null, Context.NONE).getValue(); } /** * 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");
     *
     * BlobContainerClient blobContainerClient = client.createBlobContainerWithResponse(
     *     "containerName",
     *     metadata,
     *     PublicAccessType.CONTAINER,
     *     context).getValue();
     * 
* * * @param containerName Name of the container to create * @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 context Additional context that is passed through the Http pipeline during the service call. * @return A {@link Response} whose {@link Response#getValue() value} contains the {@link BlobContainerClient} used * to interact with the container created. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response createBlobContainerWithResponse(String containerName, Map metadata, PublicAccessType accessType, Context context) { BlobContainerClient client = getBlobContainerClient(containerName); return new SimpleResponse<>(client.createWithResponse(metadata, accessType, null, context), client); } /** * Creates a new container within a storage account if it does not exist. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobContainerClient blobContainerClient = client.createBlobContainerIfNotExists("containerName");
     * 
* * * @param containerName Name of the container to create * @return The {@link BlobContainerClient} used to interact with the container created. */ @ServiceMethod(returns = ReturnType.SINGLE) public BlobContainerClient createBlobContainerIfNotExists(String containerName) { return createBlobContainerIfNotExistsWithResponse(containerName, null, Context.NONE).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<BlobContainerClient> response = client.createBlobContainerIfNotExistsWithResponse("containerName",
     *     options, context);
     *
     * if (response.getStatusCode() == 409) {
     *     System.out.println("Already existed.");
     * } else {
     *     System.out.printf("Create completed with status %d%n", response.getStatusCode());
     * }
     * 
* * * @param containerName Name of the container to create * @param options {@link BlobContainerCreateOptions} * @param context Additional context that is passed through the Http pipeline during the service call. * @return A {@link Response} whose {@link Response#getValue() value} contains the {@link BlobContainerClient} used * to interact with the container created. If {@link Response}'s status code is 201, a new container was * successfully created. If status code is 409, a container with the same name already existed at this location. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response createBlobContainerIfNotExistsWithResponse(String containerName, BlobContainerCreateOptions options, Context context) { BlobContainerClient client = getBlobContainerClient(containerName); return new SimpleResponse<>(client.createIfNotExistsWithResponse(options, null, context), client); } /** * Deletes the specified container in the storage account. If the container doesn't exist the operation fails. For * more information see the Azure * Docs. * *

Code Samples

* * *
     * try {
     *     client.deleteBlobContainer("container Name");
     *     System.out.printf("Delete container completed with status %n");
     * } catch (UnsupportedOperationException error) {
     *     System.out.printf("Delete container failed: %s%n", error);
     * }
     * 
* * * @param containerName Name of the container to delete */ @ServiceMethod(returns = ReturnType.SINGLE) public void deleteBlobContainer(String containerName) { deleteBlobContainerWithResponse(containerName, Context.NONE); } /** * Deletes the specified container in the storage account. If the container doesn't exist the operation fails. For * more information see the Azure * Docs. * * @param containerName Name of the container to delete * @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 deleteBlobContainerWithResponse(String containerName, Context context) { return blobServiceAsyncClient.deleteBlobContainerWithResponse(containerName, context).block(); } /** * Deletes the specified container in the storage account if it exists. For * more information see the Azure * Docs. * *

Code Samples

* * *
     * boolean result = client.deleteBlobContainerIfExists("container Name");
     * System.out.println("Delete container completed: " + result);
     * 
* * * @param containerName Name of the container to delete * @return {@code true} if the container is successfully deleted, {@code false} if the container does not exist. */ @ServiceMethod(returns = ReturnType.SINGLE) public boolean deleteBlobContainerIfExists(String containerName) { return deleteBlobContainerIfExistsWithResponse(containerName, Context.NONE).getValue(); } /** * Deletes the specified container in the storage account if it exists. For * more information see the Azure * Docs. * *

Code Samples

* * *
     * Context context = new Context("Key", "Value");
     *
     * Response<Boolean> response = client.deleteBlobContainerIfExistsWithResponse("containerName", context);
     * if (response.getStatusCode() == 404) {
     *     System.out.println("Does not exist.");
     * } else {
     *     System.out.printf("Delete completed with status %d%n", response.getStatusCode());
     * }
     * 
* * * @param containerName Name of the container to delete * @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 blob * container was successfully deleted. If status code is 404, the container does not exist. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response deleteBlobContainerIfExistsWithResponse(String containerName, Context context) { return blobServiceAsyncClient.deleteBlobContainerIfExistsWithResponse(containerName, context).block(); } /** * Gets the URL of the storage account represented by this client. * * @return the URL. */ public String getAccountUrl() { return blobServiceAsyncClient.getAccountUrl(); } /** * Returns a lazy loaded list of containers in this account. The returned {@link PagedIterable} can be consumed * while new items are automatically retrieved as needed. For more information, see the Azure Docs. * *

Code Samples

* * *
     * client.listBlobContainers().forEach(container -> System.out.printf("Name: %s%n", container.getName()));
     * 
* * * @return The list of containers. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable listBlobContainers() { return this.listBlobContainers(new ListBlobContainersOptions(), null); } /** * Returns a lazy loaded list of containers in this account. The returned {@link PagedIterable} can be consumed * while new items are automatically retrieved as needed. For more information, see the Azure Docs. * *

Code Samples

* * *
     * ListBlobContainersOptions options = new ListBlobContainersOptions()
     *     .setPrefix("containerNamePrefixToMatch")
     *     .setDetails(new BlobContainerListDetails().setRetrieveMetadata(true));
     *
     * client.listBlobContainers(options, timeout).forEach(container -> System.out.printf("Name: %s%n", container.getName()));
     * 
* * * @param options A {@link ListBlobContainersOptions} which specifies what data should be returned by the service. * 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 list of containers. */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedIterable listBlobContainers(ListBlobContainersOptions options, Duration timeout) { return new PagedIterable<>(blobServiceAsyncClient.listBlobContainersWithOptionalTimeout(options, timeout)); } /** * 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

* * *
     * 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<>(blobServiceAsyncClient.findBlobsByTags(options, timeout, context)); } /** * Gets the properties of a storage account’s Blob service. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * BlobServiceProperties properties = client.getProperties();
     *
     * System.out.printf("Hour metrics enabled: %b, Minute metrics enabled: %b%n",
     *     properties.getHourMetrics().isEnabled(),
     *     properties.getMinuteMetrics().isEnabled());
     * 
* * * @return The storage account properties. */ @ServiceMethod(returns = ReturnType.SINGLE) public BlobServiceProperties getProperties() { return getPropertiesWithResponse(null, Context.NONE).getValue(); } /** * Gets the properties of a storage account’s Blob service. For more information, see the * Azure Docs. * *

Code Samples

* * *
     * Context context = new Context("Key", "Value");
     * BlobServiceProperties properties = client.getPropertiesWithResponse(timeout, context).getValue();
     *
     * System.out.printf("Hour metrics enabled: %b, Minute metrics enabled: %b%n",
     *     properties.getHourMetrics().isEnabled(),
     *     properties.getMinuteMetrics().isEnabled());
     * 
* * * @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 {@link Response} whose {@link Response#getValue() value} contains the storage account properties. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getPropertiesWithResponse(Duration timeout, Context context) { Mono> response = blobServiceAsyncClient.getPropertiesWithResponse(context); return StorageImplUtils.blockWithOptionalTimeout(response, timeout); } /** * Sets properties for a storage account's Blob service endpoint. For more information, see the * Azure Docs. * Note that setting the default service version has no effect when using this client because this client explicitly * sets the version header on each request, overriding the default. *

This method checks to ensure the properties being sent follow the specifications indicated in the Azure Docs. * If CORS policies are set, CORS parameters that are not set default to the empty string.

* *

Code Samples

* * *
     * BlobRetentionPolicy loggingRetentionPolicy = new BlobRetentionPolicy().setEnabled(true).setDays(3);
     * BlobRetentionPolicy metricsRetentionPolicy = new BlobRetentionPolicy().setEnabled(true).setDays(1);
     *
     * BlobServiceProperties properties = new BlobServiceProperties()
     *     .setLogging(new BlobAnalyticsLogging()
     *         .setWrite(true)
     *         .setDelete(true)
     *         .setRetentionPolicy(loggingRetentionPolicy))
     *     .setHourMetrics(new BlobMetrics()
     *         .setEnabled(true)
     *         .setRetentionPolicy(metricsRetentionPolicy))
     *     .setMinuteMetrics(new BlobMetrics()
     *         .setEnabled(true)
     *         .setRetentionPolicy(metricsRetentionPolicy));
     *
     * try {
     *     client.setProperties(properties);
     *     System.out.printf("Setting properties completed%n");
     * } catch (UnsupportedOperationException error) {
     *     System.out.printf("Setting properties failed: %s%n", error);
     * }
     * 
* * * @param properties Configures the service. */ @ServiceMethod(returns = ReturnType.SINGLE) public void setProperties(BlobServiceProperties properties) { setPropertiesWithResponse(properties, null, Context.NONE); } /** * Sets properties for a storage account's Blob service endpoint. For more information, see the * Azure Docs. * Note that setting the default service version has no effect when using this client because this client explicitly * sets the version header on each request, overriding the default. *

This method checks to ensure the properties being sent follow the specifications indicated in the Azure Docs. * If CORS policies are set, CORS parameters that are not set default to the empty string.

* *

Code Samples

* * *
     * BlobRetentionPolicy loggingRetentionPolicy = new BlobRetentionPolicy().setEnabled(true).setDays(3);
     * BlobRetentionPolicy metricsRetentionPolicy = new BlobRetentionPolicy().setEnabled(true).setDays(1);
     *
     * BlobServiceProperties properties = new BlobServiceProperties()
     *     .setLogging(new BlobAnalyticsLogging()
     *         .setWrite(true)
     *         .setDelete(true)
     *         .setRetentionPolicy(loggingRetentionPolicy))
     *     .setHourMetrics(new BlobMetrics()
     *         .setEnabled(true)
     *         .setRetentionPolicy(metricsRetentionPolicy))
     *     .setMinuteMetrics(new BlobMetrics()
     *         .setEnabled(true)
     *         .setRetentionPolicy(metricsRetentionPolicy));
     *
     * Context context = new Context("Key", "Value");
     *
     * System.out.printf("Setting properties completed with status %d%n",
     *     client.setPropertiesWithResponse(properties, timeout, context).getStatusCode());
     * 
* * * @param properties Configures the service. * @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 storage account properties. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response setPropertiesWithResponse(BlobServiceProperties properties, Duration timeout, Context context) { Mono> response = blobServiceAsyncClient.setPropertiesWithResponse(properties, context); return StorageImplUtils.blockWithOptionalTimeout(response, timeout); } /** * Gets a user delegation key for use with this account's blob storage. Note: This method call is only valid when * using {@link TokenCredential} in this object's {@link HttpPipeline}. * *

Code Samples

* * *
     * System.out.printf("User delegation key: %s%n",
     *     client.getUserDelegationKey(delegationKeyStartTime, delegationKeyExpiryTime));
     * 
* * * @param start Start time for the key's validity. Null indicates immediate start. * @param expiry Expiration of the key's validity. * @return The user delegation key. */ @ServiceMethod(returns = ReturnType.SINGLE) public UserDelegationKey getUserDelegationKey(OffsetDateTime start, OffsetDateTime expiry) { return getUserDelegationKeyWithResponse(start, expiry, null, Context.NONE).getValue(); } /** * Gets a user delegation key for use with this account's blob storage. Note: This method call is only valid when * using {@link TokenCredential} in this object's {@link HttpPipeline}. * *

Code Samples

* * *
     * System.out.printf("User delegation key: %s%n",
     *     client.getUserDelegationKeyWithResponse(delegationKeyStartTime, delegationKeyExpiryTime, timeout, context));
     * 
* * * @param start Start time for the key's validity. Null indicates immediate start. * @param expiry Expiration of the key's validity. * @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 {@link Response} whose {@link Response#getValue() value} contains the user delegation key. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getUserDelegationKeyWithResponse(OffsetDateTime start, OffsetDateTime expiry, Duration timeout, Context context) { Mono> response = blobServiceAsyncClient.getUserDelegationKeyWithResponse(start, expiry, context); return StorageImplUtils.blockWithOptionalTimeout(response, timeout); } /** * Retrieves statistics related to replication for the Blob service. It is only available on the secondary location * endpoint when read-access geo-redundant replication is enabled for the storage account. For more information, see * the * Azure Docs. * *

Code Samples

* * *
     * System.out.printf("Geo-replication status: %s%n",
     *     client.getStatistics().getGeoReplication().getStatus());
     * 
* * * @return The storage account statistics. */ @ServiceMethod(returns = ReturnType.SINGLE) public BlobServiceStatistics getStatistics() { return getStatisticsWithResponse(null, Context.NONE).getValue(); } /** * Retrieves statistics related to replication for the Blob service. It is only available on the secondary location * endpoint when read-access geo-redundant replication is enabled for the storage account. For more information, see * the * Azure Docs. * *

Code Samples

* * *
     * System.out.printf("Geo-replication status: %s%n",
     *     client.getStatisticsWithResponse(timeout, context).getValue().getGeoReplication().getStatus());
     * 
* * * @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 {@link Response} whose {@link Response#getValue() value} the storage account statistics. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getStatisticsWithResponse(Duration timeout, Context context) { Mono> response = blobServiceAsyncClient.getStatisticsWithResponse(context); return StorageImplUtils.blockWithOptionalTimeout(response, timeout); } /** * Returns the sku name and account kind for the account. For more information, please see the * Azure Docs. * *

Code Samples

* * *
     * StorageAccountInfo accountInfo = client.getAccountInfo();
     *
     * System.out.printf("Account kind: %s, SKU: %s%n", accountInfo.getAccountKind(), accountInfo.getSkuName());
     * 
* * * @return The storage account info. */ @ServiceMethod(returns = ReturnType.SINGLE) public StorageAccountInfo getAccountInfo() { return getAccountInfoWithResponse(null, Context.NONE).getValue(); } /** * 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. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A {@link Response} whose {@link Response#getValue() value} contains the storage account info. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getAccountInfoWithResponse(Duration timeout, Context context) { Mono> response = blobServiceAsyncClient.getAccountInfoWithResponse(context); return StorageImplUtils.blockWithOptionalTimeout(response, timeout); } /** * Get associated account name. * * @return account name associated with this storage resource. */ public String getAccountName() { return this.blobServiceAsyncClient.getAccountName(); } /** * Generates an account SAS for the Azure Storage account using the specified {@link AccountSasSignatureValues}. *

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

See {@link AccountSasSignatureValues} for more information on how to construct an account SAS.

* *

Generating an account SAS

*

The snippet below generates an AccountSasSignatureValues object that lasts for two days and gives the user * read and list access to blob and file shares.

* *
     * AccountSasPermission permissions = new AccountSasPermission()
     *     .setListPermission(true)
     *     .setReadPermission(true);
     * AccountSasResourceType resourceTypes = new AccountSasResourceType().setContainer(true);
     * AccountSasService services = new AccountSasService().setBlobAccess(true).setFileAccess(true);
     * OffsetDateTime expiryTime = OffsetDateTime.now().plus(Duration.ofDays(2));
     *
     * AccountSasSignatureValues sasValues =
     *     new AccountSasSignatureValues(expiryTime, permissions, services, resourceTypes);
     *
     * // Client must be authenticated via StorageSharedKeyCredential
     * String sas = client.generateAccountSas(sasValues);
     * 
* * * @param accountSasSignatureValues {@link AccountSasSignatureValues} * * @return A {@code String} representing the SAS query parameters. */ public String generateAccountSas(AccountSasSignatureValues accountSasSignatureValues) { return this.blobServiceAsyncClient.generateAccountSas(accountSasSignatureValues); } /* TODO(gapra): REST Docs*/ /** * Generates an account SAS for the Azure Storage account using the specified {@link AccountSasSignatureValues}. *

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

See {@link AccountSasSignatureValues} for more information on how to construct an account SAS.

* *

Generating an account SAS

*

The snippet below generates an AccountSasSignatureValues object that lasts for two days and gives the user * read and list access to blob and file shares.

* *
     * AccountSasPermission permissions = new AccountSasPermission()
     *     .setListPermission(true)
     *     .setReadPermission(true);
     * AccountSasResourceType resourceTypes = new AccountSasResourceType().setContainer(true);
     * AccountSasService services = new AccountSasService().setBlobAccess(true).setFileAccess(true);
     * OffsetDateTime expiryTime = OffsetDateTime.now().plus(Duration.ofDays(2));
     *
     * AccountSasSignatureValues sasValues =
     *     new AccountSasSignatureValues(expiryTime, permissions, services, resourceTypes);
     *
     * // Client must be authenticated via StorageSharedKeyCredential
     * String sas = client.generateAccountSas(sasValues, new Context("key", "value"));
     * 
* * * @param accountSasSignatureValues {@link AccountSasSignatureValues} * @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 generateAccountSas(AccountSasSignatureValues accountSasSignatureValues, Context context) { return this.blobServiceAsyncClient.generateAccountSas(accountSasSignatureValues, context); } /** * Restores a previously deleted container. * If the container associated with provided deletedContainerName * already exists, this call will result in a 409 (conflict). * This API is only functional if Container Soft Delete is enabled * for the storage account associated with the container. * *

Code Samples

* * *
     * ListBlobContainersOptions listBlobContainersOptions = new ListBlobContainersOptions();
     * listBlobContainersOptions.getDetails().setRetrieveDeleted(true);
     * client.listBlobContainers(listBlobContainersOptions, null).forEach(
     *     deletedContainer -> {
     *         BlobContainerClient blobContainerClient = client.undeleteBlobContainer(
     *             deletedContainer.getName(), deletedContainer.getVersion());
     *     }
     * );
     * 
* * * @param deletedContainerName The name of the previously deleted container. * @param deletedContainerVersion The version of the previously deleted container. * @return The {@link BlobContainerClient} used to interact with the restored container. */ @ServiceMethod(returns = ReturnType.SINGLE) public BlobContainerClient undeleteBlobContainer(String deletedContainerName, String deletedContainerVersion) { return this.undeleteBlobContainerWithResponse( new UndeleteBlobContainerOptions(deletedContainerName, deletedContainerVersion), null, Context.NONE).getValue(); } /** * Restores a previously deleted container. The restored container * will be renamed to the destinationContainerName if provided in options. * Otherwise deletedContainerName is used as destination container name. * If the container associated with provided destinationContainerName * already exists, this call will result in a 409 (conflict). * This API is only functional if Container Soft Delete is enabled * for the storage account associated with the container. * *

Code Samples

* * *
     * ListBlobContainersOptions listBlobContainersOptions = new ListBlobContainersOptions();
     * listBlobContainersOptions.getDetails().setRetrieveDeleted(true);
     * client.listBlobContainers(listBlobContainersOptions, null).forEach(
     *     deletedContainer -> {
     *         BlobContainerClient blobContainerClient = client.undeleteBlobContainerWithResponse(
     *             new UndeleteBlobContainerOptions(deletedContainer.getName(), deletedContainer.getVersion()),
     *             timeout, context).getValue();
     *     }
     * );
     * 
* * * @param options {@link UndeleteBlobContainerOptions}. * @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 {@link Response} whose {@link Response#getValue() value} contains the {@link BlobContainerClient} used * to interact with the restored container. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response undeleteBlobContainerWithResponse( UndeleteBlobContainerOptions options, Duration timeout, Context context) { Mono> response = this.blobServiceAsyncClient.undeleteBlobContainerWithResponse(options, context) .map(r -> new SimpleResponse<>(r, getBlobContainerClient(r.getValue().getBlobContainerName()))); return StorageImplUtils.blockWithOptionalTimeout(response, timeout); } // /** // * Renames an existing blob container. // * // *

Code Samples

// * // * // * // * // * @param sourceContainerName The current name of the container. // * @param destinationContainerName The new name of the container. // * @return A {@link BlobContainerClient} used to interact with the renamed container. // */ // @ServiceMethod(returns = ReturnType.SINGLE) // BlobContainerClient renameBlobContainer(String sourceContainerName, String destinationContainerName) { // return renameBlobContainerWithResponse(sourceContainerName, new BlobContainerRenameOptions(destinationContainerName // ), null, Context.NONE).getValue(); // } // // /** // * Renames an existing blob container. // * // *

Code Samples

// * // * // * // * // * @param options {@link BlobContainerRenameOptions} // * @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 {@link Response} whose {@link Response#getValue() value} contains a // * {@link BlobContainerClient} used to interact with the renamed container. // */ // @ServiceMethod(returns = ReturnType.SINGLE) // Response renameBlobContainerWithResponse(String sourceContainerName, // BlobContainerRenameOptions options, Duration timeout, Context context) { // Mono> response = // this.blobServiceAsyncClient.renameBlobContainerWithResponse(sourceContainerName, options, context) // .map(r -> new SimpleResponse<>(r, getBlobContainerClient(r.getValue().getBlobContainerName()))); // // return StorageImplUtils.blockWithOptionalTimeout(response, timeout); // } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy