練習 - 將應用程式連線到 Azure 儲存體帳戶

已完成

Azure 儲存體用戶端程式庫提供用來與 Azure 儲存體帳戶互動的物件模型。 它用來快速連線至 Azure 儲存體帳戶,並使用 Azure 儲存體服務 API。

Azure 儲存體用戶端程式庫物件模型

Azure 中的儲存體帳戶會組織為一或多個「容器」,以將實際的 Blob 物件 (檔案) 儲存於您的帳戶中。 這些容器類似檔案系統中的資料夾。 我們可以使用適用於 .NET 的 Azure 儲存體 Blob 用戶端程式庫,以在儲存體帳戶中建立容器來儲存相片。

若要在程式中使用適用於 .NET 的 Azure 儲存體 Blob 用戶端程式庫,您必須在程式頂端,針對 Azure.Storage.Blobs 命名空間新增 using 陳述式。

  1. 將下列命令新增至 Program.cs。

    using Azure.Storage.Blobs;
    

    若要從 .NET 應用程式建立及管理儲存體帳戶中的容器,您可以使用 BlobContainerClient 物件。 若要將 BlobContainerClient 物件具現化,您必須提供儲存體帳戶的連接字串與容器名稱。 容器名稱的長度必須介於 3 到 63 個字元之間,而且只能包含小寫字母與虛線 (-) 字元。 針對此應用程式,我們會使用 photos 這個名稱。

  2. 將下列程式碼新增至您應用程式的主要區段,以取得 Azure 儲存體連接字串,並建立 BlobContainerClient 物件。

    var connectionString = configuration.GetConnectionString("StorageAccount");
    string containerName = "photos";
    
    BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
    

    注意

    此時,用戶端程式庫尚未嘗試連線到 Azure 或驗證所使用的連接字串與存取金鑰。 其只會建構用於針對 Azure Blob 儲存體執行作業的輕量型用戶端物件。 只有在針對儲存體帳戶叫用作業時,才會進行網路呼叫。

  3. 在前幾行下方新增程式碼,以建立將儲存影像的 photos 容器。

    container.CreateIfNotExists();
    
  4. 儲存您的檔案。

  5. 立即執行應用程式,讓其在儲存體帳戶中建立容器。 由於我們使用了 CreateIfNotExists 方法,因此,您可以多次執行程式,但將只會在第一次執行時建立容器。

    dotnet run
    
  6. 您可以執行下列 Azure CLI 命令來確認您已建立容器。 請記得以您的儲存體帳戶名稱取代 <name>

    az storage container list \
    --account-name <name>
    

適用於 JavaScript 的 Azure 儲存體 Blob 用戶端程式庫包含許多用戶端物件,可用來與 Azure 儲存體 Blob 進行互動。 此階層的頂端是 BlobServiceClient 物件。 若要在 JavaScript 程式碼中使用這個物件:

  1. 在程式碼編輯器中開啟您的 index.js 檔案,然後在 require('dotenv').config(); 陳述式之後立即新增以下陳述式:

    const { BlobServiceClient } = require("@azure/storage-blob");
    
  2. 現在,您必須在程式碼中,透過取得儲存體帳戶連接字串並傳遞給 BlobServiceClient 物件上的 Factory 方法 fromConnectionString,來建立 BlobServiceClient 物件。 新增下列幾行程式碼:

    const storageAccountConnectionString = process.env.AZURE_STORAGE_CONNECTION_STRING;
    const blobServiceClient = BlobServiceClient.fromConnectionString(storageAccountConnectionString);
    

    注意

    除非叫用需要用戶端程式庫的作業,否則該程式庫將不會嘗試連線到 Azure。 用戶端物件是能夠存取 Azure Blob 儲存體的輕量型物件;此物件不會驗證所使用的連線或存取金鑰。

  3. 當您在程式中定義用戶端物件後,即可使用用戶端物件上的方法來執行實際工作。 進行網路呼叫的方法會刻意非同步。 程式庫會使用 Promise 傳回非同步結果。 基於該理由,您必須將 main 函式標示為非同步。 使用下列程式碼來取代 main 函式物件。 由兩個正斜線開頭的行是註解。

    async function main() {
     // Function code here
    }
    
  4. 將變更儲存至 index.js 檔案。

    現在,請新增一些程式碼以針對我們的儲存體帳戶執行作業。 儲存體帳戶會組織為一或多個容器,其作用類似儲存體帳戶中的資料夾。 您在儲存體帳戶中建立的 Blob 物件 (檔案) 會儲存於這其中一個容器內。 您必須在儲存體帳戶中建立容器來儲存相片。

    容器名稱的長度必須介於 3 到 63 個字元之間,而且只能包含小寫字母與虛線 (-) 字元。 針對此應用程式,我們會使用 photos 這個名稱。

    若要在儲存體帳戶中建立容器,您需要取得代表儲存體帳戶中容器的 ContainerClient 物件。 儘管容器尚未存在於儲存體帳戶中,我們可以使用 ContainerClient 來建立容器,以及在建立後加以管理。

  5. 若要取得 ContainerClient 物件,請呼叫 BlobServiceClient 物件上的 getContainerClient 方法,並提供容器的名稱作為參數。 接著,若要在 Azure 儲存體帳戶中建立容器,請使用 containerClient 物件上的 createIfNotExists 方法。 使用這些陳述式取代 // Function Code here 註解行:

    // Create a container (folder) if it does not exist
    const containerName = 'photos';
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const containerExists = await containerClient.exists()
    if ( !containerExists) {
        const createContainerResponse = await containerClient.createIfNotExists();
        console.log(`Create container ${containerName} successfully`, createContainerResponse.succeeded);
    }
    else {
        console.log(`Container ${containerName} already exists`);
    }
    
  6. 儲存對 index.js 檔案進行的變更。

  7. 在 Cloud Shell 命令列中,輸入下列命令來建置和執行程式,以在儲存體帳戶中建立容器:

    node index.js
    

    提示

    如果您收到關於使用 await 關鍵字的錯誤,請確定您已經按照先前指示中的最終步驟,將 async 關鍵字新增至 main 函式定義。

    第一次執行程式時,您應該會看到已成功建立容器的訊息,而狀態則為 true。 第二次與後續執行程式時,您將會類似的訊息但狀態為 false,因為容器已存在。

  8. 您可以執行下列 Azure CLI 命令來確認您已建立容器。 請記得以您的儲存體帳戶名稱取代 <name>

    az storage container list \
    --account-name <name>
    

既然我們的程式已連線到 Azure 儲存體帳戶,而且我們已建立 photos 容器,讓我們的程式能夠將影像上傳到其中。