分享方式:


快速入門:適用於 .NET 的 Azure Blob 儲存體用戶端程式庫

注意

[從頭開始建置] 選項會逐步引導您逐步完成建立新專案、安裝套件、撰寫程式碼,以及執行基本主控台應用程式的流程。 如果您想要了解建立應用程式以連線至 Azure Blob 儲存體所涉及的所有詳細資料,建議您使用此方法。 如果您偏好將部署工作自動化,並從已完成的專案開始,請選擇從範本開始

注意

[從範本開始] 選項會使用 Azure Developer CLI 將部署工作自動化,並使您從已完成的專案開始。 如果您想要儘快探索程式碼,而不完成設定工作,建議您使用此方法。 如果您偏好使用逐步指示來建置應用程式,請選擇從頭開始建置

開始使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫。 Azure Blob 儲存體是雲端適用的 Microsoft 物件儲存體解決方案,已針對大量非結構化資料的儲存進行最佳化調整。

在本文中,您會遵循步驟來安裝套件,並嘗試基本工作的範例程式碼。

在本文中,您會使用 Azure Developer CLI 來部署 Azure 資源,並只用幾個命令來執行已完成的主控台應用程式。

API 參考文件 | 程式庫來源程式碼 | 套件 (NuGet) | 範例

這部影片說明如何開始使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫。

下列各節也會描述影片中的步驟。

必要條件

設定

本節會引導您準備專案以搭配使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫。

建立專案

使用 .NET CLI 或 Visual Studio 2022 建立 .NET 主控台應用程式。

  1. 在 Visual Studio 頂端,瀏覽至 [檔案]>[新增]>[專案]

  2. 在對話方塊視窗中,在專案範本搜尋方塊中輸入「主控台應用程式」,然後選取第一個結果。 在對話方塊底部選擇 [下一步]。

    顯示如何使用 Visual Studio 建立新專案的螢幕擷取畫面。

  3. 針對 [專案名稱],輸入 BlobQuickstart。 其餘欄位保持預設值,然後選取 [下一步]。

  4. 針對 [Framework],確定已選取最新安裝的 .NET 版本。 接著,選擇 [建立]。 Visual Studio 環境內將會開啟新的專案。

Install the package

若要與 Azure Blob 儲存體互動,請安裝適用於 .NET 的 Azure Blob 儲存體用戶端程式庫。

  1. 在 [方案總管] 中,以滑鼠右鍵按一下專案的 [相依性] 節點。 選取 [管理 NuGet 套件]

  2. 在產生的視窗中,搜尋 Azure.Storage.Blobs。 選取適當的結果,然後選取 [安裝]

    顯示如何使用 Visual Studio 新增套件的螢幕擷取畫面。

設定應用程式程式碼

Program.cs 檔案中的起始程式碼換成符合下列範例,其中包含此練習所需的 using 陳述式。

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System;
using System.IO;

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

安裝 Azure Developer CLI 後,您可以建立儲存體帳戶,並只用幾個命令來執行範例程式碼。 您可以在本機開發環境中或在 DevContainer 中執行專案。

初始化 Azure Developer CLI 範本並部署資源

從空目錄,遵循下列步驟來初始化 azd 範本、佈建 Azure 資源,以及開始使用程式碼:

  • 從 GitHub 複製快速入門存放庫資產,並在本機初始化範本:

    azd init --template blob-storage-quickstart-dotnet
    

    系統將會提示您輸入下列資訊:

    • 環境名稱:對於 Azure Developer CLI 建立的所有 Azure 資源,此值會用作其前置詞。 名稱在所有 Azure 訂用帳戶中必須是唯一的,且長度必須介於 3 與 24 個字元之間。 名稱僅能包含數字和小寫字母。
  • 登入 Azure:

    azd auth login
    
  • 佈建資源並將其部署至 Azure:

    azd up
    

    系統將會提示您輸入下列資訊:

    • 訂用帳戶:您資源部署至的 Azure 訂用帳戶。
    • 位置:部署資源的區域。

    部署可能需要幾分鐘的時間才能完成。 azd up 命令的輸出包含新建立的儲存體帳戶名稱,稍後您將需要此儲存體帳戶來執行程式碼。

執行範例程式碼

此時,資源會部署至 Azure,且專案已準備好執行。 請遵循下列步驟來更新程式碼中的儲存體帳戶名稱,並執行範例主控台應用程式:

  • 更新儲存體帳戶名稱:瀏覽至 src 目錄並編輯 Program.cs。 尋找 <storage-account-name> 預留位置,並將其取代為 azd up 命令所建立的儲存體帳戶實際名稱。 儲存變更。
  • 執行專案:如果您使用 Visual Studio,請按 F5 來建置並執行程式碼,並與主控台應用程式互動。 如果您使用 .NET CLI,請瀏覽至您的應用程式目錄、使用 dotnet build 建置專案,然後使用 dotnet run 執行應用程式。
  • 觀察輸出:此應用程式會在本機 data 資料夾中建立一個測試檔案,並將其上傳到儲存體帳戶中的容器。 範例會接著列出容器中的 Blob,並下載具有新名稱的檔案,您便可比較舊檔案和新檔案。

若要深入了解範例程式碼的運作方式,請參閱程式碼範例

當您完成了測試程式碼時,請參閱清除資源一節,以刪除 azd up 命令所建立的資源。

物件模型

Azure Blob 儲存體已針對儲存大量非結構化資料進行最佳化。 非結構化資料不遵守特定資料模型或定義,例如文字或二進位資料。 Blob 儲存體提供三種類型資源:

  • 儲存體帳戶
  • 儲存體帳戶中的容器
  • 容器中的 Blob

下圖顯示資源之間的關係。

Blob 儲存體架構的圖表。

使用下列 .NET 類別與這些資源互動:

  • BlobServiceClientBlobServiceClient 類別可讓您操作 Azure 儲存體資源和 Blob 容器。
  • BlobContainerClientBlobContainerClient 類別可讓您操作 Azure 儲存體容器及其 Blob。
  • BlobClientBlobClient 類別可讓您操作 Azure 儲存體 Blob。

程式碼範例

下列各節中的範例程式碼片段示範如何使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫來執行下列工作:

重要

請確定您已安裝正確的 NuGet 套件,並新增必要的 using 陳述式,讓程式碼範例能夠運作,如設定一節所述。

注意

Azure Developer CLI 範本包含範例程式碼已就緒的專案。 下列範例為範例程式碼的每個部分提供詳細資料。 此範本會實作建議的無密碼驗證方法,如向 Azure 驗證一節中所述。 連接字串方法會顯示為替代方案,但不會用於範本中,且不建議用於實際執行程式碼。

向 Azure 驗證,並授權存取 Blob 資料

應用程式向 Azure Blob 儲存體提出的要求必須經過授權。 在程式碼中實作對 Azure 服務 (包括 Blob 儲存體) 的無密碼連線時,建議使用 Azure.Identity 用戶端程式庫提供的 DefaultAzureCredential 類別。

您也可以使用帳戶存取金鑰,以授權對 Azure Blob 儲存體的要求。 不過,應該謹慎使用此方法。 開發人員必須盡可能避免在不安全的地方公開存取金鑰。 任何擁有存取金鑰的人都可以授權執行目標為儲存體帳戶的要求,而且可實質存取所有資料。 DefaultAzureCredential 提供優於帳戶金鑰的管理和安全性優點,允許無密碼驗證。 下列範例示範這兩個選項。

DefaultAzureCredential 是適用於 .NET 的 Azure Identity 用戶端程式庫所提供的類別,如需深入了解,請參閱 DefaultAzureCredential 概觀DefaultAzureCredential 支援多個驗證方法,並在執行階段判斷應該使用哪個方法。 此方法可讓您的應用程式在不同的環境中 (本機或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。

Azure 身分識別程式庫概觀中可以找到 DefaultAzureCredential 尋找認證時的順序和位置。

例如,應用程式在本機開發時可以使用 Visual Studio 登入認證進行驗證。 應用程式在部署至 Azure 之後就可以使用受控識別。 此轉移不需要變更程式碼。

將角色指派給 Microsoft Entra 使用者帳戶

在本機開發時,請確定存取 Blob 資料的使用者帳戶具有正確的權限。 您需要儲存體 Blob 資料參與者才能讀取和寫入 Blob 資料。 若要指派此角色給您自己,您需要被指派使用者存取管理員角色,或另一個包含 Microsoft.Authorization/roleAssignments/write 動作的角色。 您可以使用 Azure 入口網站、Azure CLI 或 Azure PowerShell,將 Azure RBAC 角色指派給使用者。 您可以在範圍概觀頁面上深入了解角色指派的可用範圍。

在此案例中,您會將權限指派給使用者帳戶 (以儲存體帳戶為範圍),以遵循最低權限原則。 此做法只為使用者提供所需的最低權限,並建立更安全的實際執行環境。

下列範例將儲存體 Blob 資料參與者角色指派給使用者帳戶,以針對儲存體帳戶中的 Blob 資料提供讀取和寫入存取權。

重要

在大部分情況下,角色指派在 Azure 中傳播只需要一兩分鐘,但在罕見情況下,可能需要長達八分鐘。 如果您第一次執行程式碼時收到驗證錯誤,請稍候片刻再試一次。

  1. 在 Azure 入口網站中,使用主要搜尋列或左側導覽找出您的儲存體帳戶。

  2. 在儲存體帳戶概觀頁面上,從左側功能表中選取 [存取控制 (IAM)]

  3. 在 [存取控制 (IAM)] 頁面上,選取 [角色指派] 索引標籤。

  4. 從頂端功能表選取 [+ 新增],然後從產生的下拉功能表中選取 [新增角色指派]

    顯示如何指派角色的螢幕擷取畫面。

  5. 使用搜尋方塊,從結果篩選出所需的角色。 在此範例中,搜尋「儲存體 Blob 資料參與者」,選取相符的結果,然後選擇 [下一步]

  6. 在 [存取權指派對象為] 下,選取 [使用者、群組或服務主體],然後選擇 [+ 選取成員]

  7. 在對話方塊中,搜尋 Microsoft Entra 使用者名稱 (通常是您的 user@domain 電子郵件地址),然後在對話方塊底部選擇 [選取]

  8. 選取 [檢閱 + 指派] 以移至最終頁面,然後再次選取 [檢閱 + 指派] 以完成此程序。

使用 DefaultAzureCredential 登入並將應用程式程式碼連線至 Azure

您可以使用下列步驟來授權存取儲存體帳戶中的資料:

  1. 針對本機開發,請確定使用您指派角色的相同 Microsoft Entra 帳戶進行驗證。 您可以透過 Azure CLI 或 Azure PowerShell 這類熱門開發工具來進行驗證。 您可以用來驗證的開發工具會因語言而異。

    使用下列命令透過 Azure CLI 登入 Azure:

    az login
    
  2. 若要使用 DefaultAzureCredential,請將 Azure.Identity 套件新增至您的應用程式。

    1. 在 [方案總管] 中,以滑鼠右鍵按一下專案的 [相依性] 節點。 選取 [管理 NuGet 套件]

    2. 在產生的視窗中,搜尋 Azure.Identity。 選取適當的結果,然後選取 [安裝]

      顯示如何新增身分識別套件的螢幕擷取畫面。

  3. 將 Program.cs 程式碼更新為符合下列範例。 在開發期間,程式碼在本機工作站上執行時會根據您優先用來登入的工具 (例如 Azure CLI 或 Visual Studio),使用其開發人員認證向 Azure 進行驗證。

    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    using System;
    using System.IO;
    using Azure.Identity;
    
    // TODO: Replace <storage-account-name> with your actual storage account name
    var blobServiceClient = new BlobServiceClient(
            new Uri("https://<storage-account-name>.blob.core.windows.net"),
            new DefaultAzureCredential());
    
  4. 請務必在 BlobServiceClient 的 URI 中更新儲存體帳戶名稱。 您可以在 Azure 入口網站的概觀頁面上找到儲存體帳戶名稱。

    顯示如何尋找儲存體帳戶名稱的螢幕擷取畫面。

    注意

    部署至 Azure 時,您可以使用上述程式碼,從 Azure 中執行的應用程式授權對 Azure 儲存體的要求。 不過,在 Azure 中,您必須在應用程式中啟用受控識別。 然後,將您的儲存體帳戶設定為允許該受控識別進行連線。 如需在 Azure 服務之間設定此連線的詳細指示,請參閱從 Azure 託管應用程式進行驗證教學課程。

建立容器

blobServiceClient 物件上呼叫 CreateBlobContainerAsync 方法,以在您的儲存體帳戶中建立新容器。 在此範例中,程式碼會將 GUID 值附加到容器名稱,以確保其為唯一名稱。

Program.cs 檔案的結尾加入下列程式碼:

// TODO: Replace <storage-account-name> with your actual storage account name
var blobServiceClient = new BlobServiceClient(
        new Uri("https://<storage-account-name>.blob.core.windows.net"),
        new DefaultAzureCredential());

//Create a unique name for the container
string containerName = "quickstartblobs" + Guid.NewGuid().ToString();

// Create the container and return a container client object
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);

若要深入了解建立容器的相關資訊,以及探索更多程式碼範例,請參閱使用 .NET 建立 Blob 容器

重要

容器名稱必須是小寫字母。 如需為容器和 Blob 命名的詳細資訊,請參閱命名和參考容器、Blob 及中繼資料

將 Blob 上傳至容器

使用 UploadAsync 將 Blob 上傳至容器。 此範例程式碼會在本機 data 目錄中建立文字檔,以上傳至容器。

Program.cs 檔案的結尾加入下列程式碼:

// Create a local file in the ./data/ directory for uploading and downloading
string localPath = "data";
Directory.CreateDirectory(localPath);
string fileName = "quickstart" + Guid.NewGuid().ToString() + ".txt";
string localFilePath = Path.Combine(localPath, fileName);

// Write text to the file
await File.WriteAllTextAsync(localFilePath, "Hello, World!");

// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient(fileName);

Console.WriteLine("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);

// Upload data from the local file, overwrite the blob if it already exists
await blobClient.UploadAsync(localFilePath, true);

若要深入了解如何上傳 Blob,以及探索更多程式碼範例,請參閱使用 .NET 上傳 Blob

列出容器中的 Blob

呼叫 GetBlobsAsync 方法,以列出容器中的 Blob。

Program.cs 檔案的結尾加入下列程式碼:

Console.WriteLine("Listing blobs...");

// List all blobs in the container
await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
{
    Console.WriteLine("\t" + blobItem.Name);
}

若要深入了解如何列出 Blob,以及探索更多程式碼範例,請參閱使用 .NET 列出 Blob

下載 Blob

呼叫 DownloadToAsync 方法來下載先前建立的 Blob。 此範例程式碼會將字串 "DOWNLOADED" 附加至檔案名稱,以便您可以在本機檔案系統中看到這兩個檔案。

Program.cs 檔案的結尾加入下列程式碼:

// Download the blob to a local file
// Append the string "DOWNLOADED" before the .txt extension 
// so you can compare the files in the data directory
string downloadFilePath = localFilePath.Replace(".txt", "DOWNLOADED.txt");

Console.WriteLine("\nDownloading blob to\n\t{0}\n", downloadFilePath);

// Download the blob's contents and save it to a file
await blobClient.DownloadToAsync(downloadFilePath);

若要深入了解如何下載 Blob,以及探索更多程式碼範例,請參閱使用 .NET 下載 Blob

刪除容器

下列程式碼會使用 DeleteAsync 整個容器,以清除應用程式所建立的資源。 程式碼範例也會刪除應用程式所建立的本機檔案。

應用程式會在刪除 Blob、容器和本機檔案之前呼叫 Console.ReadLine,藉以暫停使用者輸入。 您可以利用這個機會,在刪除資源之前先確認這些資源已正確建立。

Program.cs 檔案的結尾加入下列程式碼:

// Clean up
Console.Write("Press any key to begin clean up");
Console.ReadLine();

Console.WriteLine("Deleting blob container...");
await containerClient.DeleteAsync();

Console.WriteLine("Deleting the local source and downloaded files...");
File.Delete(localFilePath);
File.Delete(downloadFilePath);

Console.WriteLine("Done");

若要深入了解如何刪除容器,以及探索更多程式碼範例,請參閱使用 .NET 刪除及還原 Blob 容器

完成的程式碼

完成這些步驟之後,Program.cs 檔案中的程式碼現在應該如下所示:

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Identity;

// TODO: Replace <storage-account-name> with your actual storage account name
var blobServiceClient = new BlobServiceClient(
        new Uri("https://<storage-account-name>.blob.core.windows.net"),
        new DefaultAzureCredential());

//Create a unique name for the container
string containerName = "quickstartblobs" + Guid.NewGuid().ToString();

// Create the container and return a container client object
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);

// Create a local file in the ./data/ directory for uploading and downloading
string localPath = "data";
Directory.CreateDirectory(localPath);
string fileName = "quickstart" + Guid.NewGuid().ToString() + ".txt";
string localFilePath = Path.Combine(localPath, fileName);

// Write text to the file
await File.WriteAllTextAsync(localFilePath, "Hello, World!");

// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient(fileName);

Console.WriteLine("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);

// Upload data from the local file
await blobClient.UploadAsync(localFilePath, true);

Console.WriteLine("Listing blobs...");

// List all blobs in the container
await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
{
    Console.WriteLine("\t" + blobItem.Name);
}

// Download the blob to a local file
// Append the string "DOWNLOADED" before the .txt extension 
// so you can compare the files in the data directory
string downloadFilePath = localFilePath.Replace(".txt", "DOWNLOADED.txt");

Console.WriteLine("\nDownloading blob to\n\t{0}\n", downloadFilePath);

// Download the blob's contents and save it to a file
await blobClient.DownloadToAsync(downloadFilePath);

// Clean up
Console.Write("Press any key to begin clean up");
Console.ReadLine();

Console.WriteLine("Deleting blob container...");
await containerClient.DeleteAsync();

Console.WriteLine("Deleting the local source and downloaded files...");
File.Delete(localFilePath);
File.Delete(downloadFilePath);

Console.WriteLine("Done");

執行程式碼

此應用程式會在本機 data 資料夾中建立一個測試檔案,並將其上傳到 Blob 儲存體。 範例會接著列出容器中的 Blob,並下載具有新名稱的檔案,您便可比較舊檔案和新檔案。

如果您使用 Visual Studio,請按 F5 來組建和執行程式碼,並與主控台應用程式互動。 如果您使用 .NET CLI,請瀏覽至您的應用程式目錄,然後組建並執行應用程式。

dotnet build
dotnet run

應用程式的輸出類似於下列範例 (為了可讀性省略了 GUID 值):

Azure Blob Storage - .NET quickstart sample

Uploading to Blob storage as blob:
         https://mystorageacct.blob.core.windows.net/quickstartblobsGUID/quickstartGUID.txt

Listing blobs...
        quickstartGUID.txt

Downloading blob to
        ./data/quickstartGUIDDOWNLOADED.txt

Press any key to begin clean up
Deleting blob container...
Deleting the local source and downloaded files...
Done

在開始清除流程之前,請檢查 data 資料夾,找出這兩個檔案。 您可以開啟這些檔案,並觀察兩者是否相同。

清除資源

在驗證檔案並完成測試之後,請按 Enter 鍵,以刪除測試檔案,以及您在儲存體帳戶中建立的容器。 您也可以使用 Azure CLI 來刪除資源。

完成快速入門時,您可以執行下列命令來清除您所建立的資源:

azd down

系統將會提示您確認刪除資源。 輸入 y 以確認。

後續步驟