【问题标题】:Azure blob storage DownloadTextAsync with BlobRequestOptionsAzure Blob 存储 DownloadTextAsync 与 BlobRequestOptions
【发布时间】:2017-08-12 05:19:50
【问题描述】:

使用 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);

我的问题是我不确定要为编码、accessCondition 或 operationContext 传递什么。我查看了文档 (https://msdn.microsoft.com/en-us/library/dn434829.aspx) 并进行了大量搜索,但我不知道要传递什么。

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

AccessCondition 和 OperationContext:不知道我应该传入什么。

或者也许有更好的方法来做我想做的事情而不使用重载的 DownloadTextAsync。

【问题讨论】:

标签: c# azure azure-blob-storage


【解决方案1】:

当我遇到这样的问题并且我很幸运 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 来处理您不需要的参数。

【讨论】:

  • 这很有趣,我一直忘记这些天 MS 的东西是开源的。谢谢。
  • 这是一个美丽的新世界 :) 乐于助人。
猜你喜欢
  • 2016-10-30
  • 2018-07-09
  • 1970-01-01
  • 2014-05-04
  • 2017-08-15
  • 2014-05-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多