快速入门:在 Node.js 中使用 JavaScript v12 SDK 管理 blob

本快速入门介绍如何使用 Node.js 管理 blob。 Blob 是可以保存大量文本或二进制数据(包括图像、文档、流媒体和存档数据)的对象。

这些示例代码片段展示了如何使用适用于 JavaScript 的 Azure Blob 存储包库执行以下步骤:

其他资源:

API 参考库源代码包 (npm)示例

先决条件

对象模型

Azure Blob 存储最适合存储巨量的非结构化数据。 非结构化数据是不遵循特定数据模型或定义的数据(如文本或二进制数据)。 Blob 存储提供了三种类型的资源:

  • 存储帐户
  • 存储帐户中的容器
  • 容器中的 blob

以下图示显示了这些资源之间的关系。

Diagram of Blob storage architecture

使用以下 JavaScript 类与这些资源进行交互:

  • BlobServiceClientBlobServiceClient 类可用于操纵 Azure 存储资源和 blob 容器。
  • ContainerClientContainerClient 类可用于操纵 Azure 存储容器及其 blob。
  • BlobClientBlobClient 类可用于操纵 Azure 存储 blob。

创建 Node.js 项目

创建名为 blob-quickstart-v12 的 JavaScript 应用程序。

  1. 在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为项目创建新目录。

    mkdir blob-quickstart-v12
    
  2. 切换到新创建的 blob-quickstart-v12 目录。

    cd blob-quickstart-v12
    
  3. 创建 package.json。

    npm init -y
    
  4. 在 Visual Studio Code 中打开项目:

    code .
    

为 blob 存储安装 npm 包

  1. 安装 Azure 存储 npm 包:

    npm install @azure/storage-blob
    
  2. 安装本快速入门中使用的其他依赖项:

    npm install uuid dotenv
    

创建 JavaScript 文件

从项目目录中执行以下操作:

  1. 创建名为 index.js 的新文件。

  2. 将以下代码复制到文件中。 在你完成本快速入门的过程中,还会添加更多代码。

    const { BlobServiceClient } = require('@azure/storage-blob');
    const { v1: uuidv1} = require('uuid');
    require('dotenv').config()
    
    async function main() {
        console.log('Azure Blob storage v12 - JavaScript quickstart sample');
    
        // Quick start code goes here
    
    }
    
    main()
    .then(() => console.log('Done'))
    .catch((ex) => console.log(ex.message));
    

从 Azure 门户复制凭据

当示例应用程序向 Azure 存储发出请求时,必须对其进行授权。 若要对请求进行授权,请将存储帐户凭据以连接字符串形式添加到应用程序中。 若要查看存储帐户凭据,请按以下步骤操作:

  1. 登录 Azure 门户

  2. 找到自己的存储帐户。

  3. 在存储帐户菜单窗格中的“安全性 + 网络”下,选择“访问密钥” 。 在这里,可以查看帐户访问密钥以及每个密钥的完整连接字符串。

    Screenshot that shows where the access key settings are in the Azure portal

  4. 在“访问密钥”窗格中,选择“显示密钥” 。

  5. 在“key1”部分,找到“连接字符串”值 。 选择“复制到剪贴板”图标来复制该连接字符串。 在下一部分,你要将此连接字符串值添加到某个环境变量。

    Screenshot showing how to copy a connection string from the Azure portal

配置存储连接字符串

在复制连接字符串后,请将其写入到运行该应用程序的本地计算机上的新环境变量。 若要设置环境变量,请打开控制台窗口,并遵照适用于操作系统的说明。 将 <yourconnectionstring> 替换为实际的连接字符串。

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

在 Windows 中添加环境变量后,必须启动命令窗口的新实例。

重新启动程序

添加环境变量后,重启需要读取环境变量的任何正在运行的程序。 例如,先重启开发环境或编辑器,然后再继续操作。

获取连接字符串

下面的代码从配置存储连接字符串部分中创建的环境变量中检索存储帐户的连接字符串。

main 函数内添加此代码:

const AZURE_STORAGE_CONNECTION_STRING =
  process.env.AZURE_STORAGE_CONNECTION_STRING;

if (!AZURE_STORAGE_CONNECTION_STRING) {
  throw Error("Azure Storage Connection string not found");
}

创建容器

  1. 确定新容器的名称。 容器名称必须为小写。

    有关命名容器和 Blob 的详细信息,请参阅命名和引用容器、Blob 和元数据

  2. 将此代码添加到 main 函数的末尾:

// Create the BlobServiceClient object which will be used to create a container client
const blobServiceClient = BlobServiceClient.fromConnectionString(
  AZURE_STORAGE_CONNECTION_STRING
);

// Create a unique name for the container
const containerName = "quickstart" + uuidv1();

console.log("\nCreating container...");
console.log("\t", containerName);

// Get a reference to a container
const containerClient = blobServiceClient.getContainerClient(containerName);
// Create the container
const createContainerResponse = await containerClient.create();
console.log(
  "Container was created successfully. requestId: ",
  createContainerResponse.requestId
);

上面的代码通过调用 fromConnectionString 方法,创建 BlobServiceClient 类的实例。 然后,调用 getContainerClient 方法以获取对容器的引用。 最后,调用 create 方法在存储帐户中实际创建容器。

将 blob 上传到容器中

将以下代码复制到 main 函数的末尾,以将文本字符串上传到 blob:

// Create a unique name for the blob
const blobName = "quickstart" + uuidv1() + ".txt";

// Get a block blob client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);

console.log("\nUploading to Azure storage as blob:\n\t", blobName);

// Upload data to the blob
const data = "Hello, World!";
const uploadBlobResponse = await blockBlobClient.upload(data, data.length);
console.log(
  "Blob was uploaded successfully. requestId: ",
  uploadBlobResponse.requestId
);

上面的代码通过从创建容器部分调用 ContainerClient 上的 getBlockBlobClient 方法,获取对 BlockBlobClient 对象的引用。 该代码通过调用 upload 方法,将文本字符串数据上传到 blob。

列出容器中的 Blob

将以下代码添加到 main 函数的末尾,以列出容器中的 blob。

console.log("\nListing blobs...");

// List the blob(s) in the container.
for await (const blob of containerClient.listBlobsFlat()) {
  console.log("\t", blob.name);
}

上面的代码调用 listBlobsFlat 方法。 在这种情况下,只向容器添加了一个 blob,因此列表操作只返回那个 blob。

下载 Blob

  1. 将以下代码添加到 main 函数的末尾,以将以前创建的 blob 下载到应用运行时。
// Get blob content from position 0 to the end
// In Node.js, get downloaded data by accessing downloadBlockBlobResponse.readableStreamBody
// In browsers, get downloaded data by accessing downloadBlockBlobResponse.blobBody
const downloadBlockBlobResponse = await blockBlobClient.download(0);
console.log("\nDownloaded blob content...");
console.log(
  "\t",
  await streamToText(downloadBlockBlobResponse.readableStreamBody)
);

上面的代码调用 download 方法。

  1. 将以下代码复制到 main 函数的后面,以将流转换回字符串。
// Convert stream to text
async function streamToText(readable) {
  readable.setEncoding('utf8');
  let data = '';
  for await (const chunk of readable) {
    data += chunk;
  }
  return data;
}

删除容器

将此代码添加到 main 函数的末尾,以删除容器及其所有 blob:

// Delete container
console.log("\nDeleting container...");

const deleteContainerResponse = await containerClient.delete();
console.log(
  "Container was deleted successfully. requestId: ",
  deleteContainerResponse.requestId
);

上面的代码通过使用 delete 方法删除整个容器,清除该应用创建的资源。 也可根据需要删除本地文件。

运行代码

  1. 从 Visual Studio Code 终端运行应用。

    node index.js
    
  2. 应用的输出类似于以下示例:

    Azure Blob storage v12 - JavaScript quickstart sample
    
    Creating container...
             quickstart4a0780c0-fb72-11e9-b7b9-b387d3c488da
    
    Uploading to Azure Storage as blob:
             quickstart4a3128d0-fb72-11e9-b7b9-b387d3c488da.txt
    
    Listing blobs...
             quickstart4a3128d0-fb72-11e9-b7b9-b387d3c488da.txt
    
    Downloaded blob content...
             Hello, World!
    
    Deleting container...
    Done
    

在调试器中逐步执行代码,并在执行过程中反复检查 Azure 门户。 检查是否正在创建容器。 可以在容器中打开 blob 并查看内容。

使用存储模拟器

本快速入门在 Azure 云中创建了一个容器和 blob。 你还可以使用 Azure Blob 存储 npm 包,在 Azure 存储模拟器上本地创建这些资源以用于开发和测试。

清除

  1. 完成本快速入门后,请删除 blob-quickstart-v12 目录。
  2. 如果你已使用完 Azure 存储资源,请使用 Azure CLI 删除存储资源

后续步骤

本快速入门介绍了如何使用 JavaScript 上传、下载和列出 blob。

有关教程、示例、快速入门和其他文档,请访问: