簡體   English   中英

讀取 Azure 存儲上的 blob 內容

[英]Read the blob content on Azure Storage

我正在使用 Microsoft.Azure.Storage.Blob nuget package 試圖獲取容器中的 blob 的內容,而不是讀取內容。

使用 ListBlobs() 方法,我可以看到所有的 blob。 每個 blob 項都有一個 URI,但我看不到 GetBlobReferenceFromServer() 所需的 blob 名稱。

因此,blob 名稱在以下示例代碼中是一個常量。

什么是正確的方法? 我是否必須拆分和解析 URI 才能找到 blob 名稱? 我必須使用其他方法嗎?

Microsoft.Azure.Storage.Blob.CloudBlobContainer container = 
    new Microsoft.Azure.Storage.Blob.CloudBlobContainer(new Uri("https://myaccount.blob.core.windows.net/containername"), 
                                                        new Microsoft.Azure.Storage.Auth.StorageCredentials("myaccount", "**********=="));

IEnumerable<Microsoft.Azure.Storage.Blob.IListBlobItem> blobs = container.ListBlobs();

foreach (var blobItem in blobs)
{
    //string blobUri = blobItem.Uri.ToString();

    Microsoft.Azure.Storage.Blob.ICloudBlob blockBlob = container.GetBlobReferenceFromServer("blobname");
    MemoryStream downloadStream = new MemoryStream();
    blockBlob.DownloadToStream(downloadStream);

    string blobContent = Encoding.UTF8.GetString(downloadStream.ToArray());
}

使用 ListBlobs() 方法,我可以看到所有的 blob。 每個 blob 項都有一個 URI,但我看不到 GetBlobReferenceFromServer() 所需的 blob 名稱。

原因是ListBlobs方法返回一個IListBlobItem類型的可枚舉,它沒有 name 屬性。 為了獲取 blob 的名稱,您可以將其轉換為實現此接口的CloudBlobCloudBlockBlob ,您將能夠獲取可以使用GetBlobReferenceFromServer方法的 blob 的名稱。

順便說一句,一旦您列出了 blob,您就不需要調用GetBlobReferenceFromServer方法,因為您已經將有關 blob 的所有信息作為列表的一部分。 GetBlobReferenceFromServer 向存儲發出另一個請求,以獲取您在列表中已經擁有的同一組屬性。

所以你的代碼可以簡單地是:

foreach (var blobItem in blobs)
{
    var blockBlob = (CloudBlockBlob) blobItem;
    MemoryStream downloadStream = new MemoryStream();
    blockBlob.DownloadToStream(downloadStream);

    string blobContent = Encoding.UTF8.GetString(downloadStream.ToArray());
}

或者,如果您沒有 go 向下轉換路線,您可以使用作為列表的一部分獲得的 URI 簡單地創建CloudBlockBlob的實例。

就像是:

foreach (var blobItem in blobs)
{
    var blockBlob = new CloudBlockBlob(blobItem.Uri, container.ServiceClient);
    MemoryStream downloadStream = new MemoryStream();
    blockBlob.DownloadToStream(downloadStream);

    string blobContent = Encoding.UTF8.GetString(downloadStream.ToArray());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM