如何使用带有 Azure Java SDK 的容器 SAS 设置 RetryPolicy?

How to set RetryPolicy using container SAS with Azure Java SDK?

我正在实施一个 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 或创建与我的容器 class 关联的经过身份验证的 CloudBlobClient

这里有'Java'和'Android'的标签,所以我会回复Java SDK,Android应该是相似的。

这里有几个选项:

  • 所有进行服务调用的 API 提供接受 BlobRequestOptions 对象的 an overload。此对象中的设置(包括重试策略)覆盖客户端的默认值。
  • 当使用 URI 构造时,CloudBlobContainer 和 CloudBlob 对象会在内部创建一个默认的 BlobServiceClient 对象,您可以使用 getServiceClient() 方法访问该对象。然后您可以对此设置默认值。
  • 如果您想继续使用连接字符串,可以使用 SAS 令牌创建一个,如文档所述here
  • 您可以创建一个 StorageCredentials object using a SAS token, which you can then use to create a CloudStorageAccount object. Note that if you opt for this route, you will need to use one of the CloudStorageAccount constructors that either take an account name or an endpoint,否则 SDK 将无法为您的存储帐户构建 URL。

希望对您有所帮助!