Azure blob storage DownloadTextAsync with BlobRequestOptions



使用 azure blob 存储和 Azure SDK,我目前正在下载如下所示的字符串:

var storageAccount = CloudStorageAccount.Parse(connectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blockBlob = container.GetBlockBlobReference(blobUid);
var text = await blockBlob.DownloadTextAsync();

我想传入一个 blobRequestOptions 来设置自定义重试策略,使其如下所示:

var storageAccount = CloudStorageAccount.Parse(connectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blockBlob = container.GetBlockBlobReference(blobUid);
var blobRequestOptions = new BlobRequestOptions()
{
     RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 3)
};
var text await blockBlob.DownloadTextAsync(encoding, accessCondition, blobRequestOptions, operationContext);

我的问题是我不确定要传入什么进行编码,访问条件或操作上下文。 我已经查看了文档(https://msdn.microsoft.com/en-us/library/dn434829.aspx(并进行了大量搜索,但我不知道要传入的内容。

编码:我的数据只是 Us-En 中的 json,所以我认为我可以使用 ACSII 或 UTF-8 很好,但我找不到 azure 是否有我应该使用的默认值。

访问条件和操作上下文:不知道我应该传入什么。

或者,也许有一种更好的方法来执行我正在尝试做的事情,而无需使用重载的DownloadTextAsync。

当我遇到这样的问题并且我很幸运SDK是开源的时,我通常会查看源代码。Azure 存储 SDK 的源代码如下所示:

https://github.com/Azure/azure-storage-net

所以这是你调用的方法:

public virtual Task<string> DownloadTextAsync(CancellationToken cancellationToken)
{
   return AsyncExtensions.TaskFromApm(this.BeginDownloadText, this.EndDownloadText, cancellationToken);
}

这基本上只是将BeginDownloadText方法从旧的 APL 模型转换为新的基于 TPL 的调用。如果您查看 BeginDownloadText:

public virtual ICancellableAsyncResult BeginDownloadText(AsyncCallback callback, object state)
{
    return this.BeginDownloadText(null /* encoding */, null /* accessCondition */, null /* options */, null /* operationContext */, callback, state);
}

您可以看到它们为编码、accessCondition 和 operationContext 显式指定了null值。如果需要,您可以进一步向下钻取,但我想说您可以使用null来获取不需要的参数。

最新更新