【问题标题】:Getting a reference to a blob using its URI使用 Blob 的 URI 获取对 Blob 的引用
【发布时间】:2019-11-26 13:33:28
【问题描述】:

我们如何通过 URI 获取 blob 引用?

我得到一个像这样的 blob 的引用:

        var blob = new CloudBlockBlob(new Uri("https://xxxx.blob.core.windows.net/input/DisabledFlights[1].cache"));

我得到这个网址的方式,是通过门户网站:

尝试下载时:

            await blob.DownloadToStreamAsync(stream);

我收到以下异常:

[7/17/2019 4:25:27 PM] Executed 'sFtpSender' (Failed, Id=4943c931-5850-4dc8-abe4-c111ed6bbfa9)
[7/17/2019 4:25:27 PM] System.Private.CoreLib: Exception while executing function: sFtpSender. Microsoft.WindowsAzure.Storage: The specified resource does not exist.

我做错了什么?如何获取对 blob 的引用?

【问题讨论】:

  • 您需要使用CloudStorageAccount 类型来创建CloudBlobClient,然后您可以从那里获取容器引用或Blob 引用(请参阅API 以了解满足您的需求)跨度>

标签: c# azure azure-blob-storage


【解决方案1】:

根据错误消息,我认为 blob 位于私有容器中。

有两种方法可以使用其 uri 获取 blob 引用。

方法一:将容器访问级别更改为Blob级别或Container级别,即可直接使用如下代码:

var blob = new CloudBlockBlob(new Uri("https://xxxx.blob.core.windows.net/input/DisabledFlights[1].cache"));

await blob.DownloadToStreamAsync(stream);

方法二:如果要保持容器为私有,在发起CloudBlockBlob()时,应在其中指定StorageCredentials,如下所示:

//besides using sas token, you can also use other way to construct StorageCredentials, like using account_name / account_key.
var blob = new CloudBlockBlob(new Uri("https://xxxx.blob.core.windows.net/input/DisabledFlights[1].cache"), ,new StorageCredentials("sasToken"));

await blob.DownloadToStreamAsync(stream);

【讨论】:

    【解决方案2】:

    试试这个:

    var blobName = new CloudBlockBlob(new Uri("https://xxxx.blob.core.windows.net/input/DisabledFlights[1].cache")).Name;
    
    CloudBlockBlob blockBlob = _container.GetBlockBlobReference(blobName);
    

    _containerCloudBlobContainer 那么

    await blockBlob.DownloadToStreamAsync(stream);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2021-12-05
      • 2017-10-24
      • 2019-04-25
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多