0

我正在实现一个 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 时,我不知道如何CloudBlobClient使用容器中的 SAS 签名创建一个。我可以同时创建CloudBlobClientCloudBlobContainer使用带有 SAS 的 URL,但是客户端是使用匿名凭据创建的,并且无法与我的容器关联:

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

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

4

1 回答 1

1

这被标记为“Java”和“Android”,所以我会回复 Java SDK,Android 应该是类似的。

这里有几个选项:

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

希望这可以帮助!

于 2018-02-16T18:37:25.297 回答