如何使用容器SAS和Azure Java SDK设置RetryPolicy?

时间:2018-02-15 17:35:52

标签: java android sas azure-storage azure-storage-blobs

我正在实施一个Android应用,我需要使用容器SAS将图像上传到blob容器。

目前使用完整端点凭据作为连接字符串,我可以使用以下代码向我的CloudBlobClient添加重试策略:

CloudStorageAccount storageAccount = CloudStorageAccount
        .parse(storageConnectionString);
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();

BlobRequestOptions options = new BlobRequestOptions();
RetryPolicy policy = new RetryExponentialRetry(BACKOFF_DELTA, MAX_RETRIES);
options.setRetryPolicyFactory(policy);
blobClient.setDefaultRequestOptions(options);

CloudBlobContainer container = blobClient.getContainerReference(containername);

现在,当我从帐户密钥切换到SAS时,我不知道如何使用我对容器的SAS签名创建CloudBlobClient。我可以使用带有SAS的URL创建CloudBlobClientCloudBlobContainer,但是客户端是使用匿名凭据创建的,并且无法与我的容器关联:

CloudBlobClient blobClient = new CloudBlobClient(URI.create(containerurl));
CloudBlobContainer container = new CloudBlobContainer(URI.create(containerurl));

有没有办法直接将RetryPolicy添加到CloudBlobContainer或创建与我的容器类关联的经过身份验证的CloudBlobClient

1 个答案:

答案 0 :(得分:1)

这是用'Java'和'Android'标记的,所以我会回复关于Java SDK,Android应该是类似的。

这里有几个选项:

  • 所有进行服务调用的API都会提供接收BlobRequestOptions对象的an overload。此对象中的设置(包括重试策略)将覆盖客户端的默认值。
  • 使用URI构建时,CloudBlobContainer和CloudBlob对象在内部创建一个默认的BlobServiceClient对象,您可以使用getServiceClient()方法访问该对象。然后,您可以在此设置默认值。
  • 如果您想继续使用连接字符串,可以使用SAS令牌创建一个连接字符串,如文档here所述。
  • 您可以使用SAS令牌创建StorageCredentials对象,然后可以使用该令牌创建CloudStorageAccount对象。请注意,如果您选择此路由,则需要使用其中一个采用an account namean endpoint的CloudStorageAccount构造函数,否则SDK将无法构建存储帐户的URL。

希望这有帮助!