com.azure.storage.blob.BlobServiceClient Maven / Gradle / Ivy
Show all versions of azure-storage-blob Show documentation
// 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);
// }
}