了解如何使用 Ruby 在 Microsoft Azure Blob 存储的容器中创建、下载和列出 blob 对象。
先决条件
若要访问 Azure 存储,需要一个 Azure 订阅。 如果还没有订阅,请在开始前创建一个免费帐户。
对 Azure 存储进行的所有访问都要通过存储帐户完成。 对于本快速入门,请使用 Azure 门户、Azure PowerShell 或 Azure CLI 创建存储帐户。 有关如何创建存储帐户的帮助,请参阅创建存储帐户。
请确保已安装以下附加先决条件:
使用 RubyGem 包的 Azure 存储客户端库适用于 Ruby:
gem install azure-storage-blob
下载示例应用程序
本快速入门中使用的 示例应用程序 是基本的 Ruby 应用程序。
使用 Git 将应用程序的副本下载到开发环境。 此命令将存储库克隆到本地计算机:
git clone https://github.com/Azure-Samples/storage-blobs-ruby-quickstart.git
导航到 storage-blobs-ruby-quickstart 文件夹,并在代码编辑器中打开 example.rb 文件。
从 Azure 门户复制凭据
示例应用程序需要授权访问存储帐户。 以连接字符串的形式向应用程序提供存储帐户凭据。 若要查看存储帐户凭据,请执行以下步骤操作:
在 Azure 门户 中,转到存储帐户。
在存储帐户概述的 设置 部分中,选择 访问密钥 以显示帐户访问密钥和连接字符串。
请记录下存储帐户的名称,因为您将在授权过程中需要用到它。
在 key1下找到 值,然后选择 复制 以便复制帐户密钥。
配置存储连接字符串
提供存储帐户名称和帐户密钥,为应用程序创建 BlobService 实例。
example. rb 文件中的以下代码实例化新的 BlobService 对象。 将 accountname 和 accountkey 值替换为帐户名和密钥。
# Create a BlobService object
account_name = "accountname"
account_key = "accountkey"
blob_client = Azure::Storage::Blob::BlobService.create(
storage_account_name: account_name,
storage_access_key: account_key
)
运行示例
此示例在 Blob 存储中创建容器,在容器中创建新 Blob,列出容器中的 Blob,并将 Blob 下载到本地文件。
运行示例。 下面是运行应用程序的输出示例:
C:\azure-samples\storage-blobs-ruby-quickstart> ruby example.rb
Creating a container: quickstartblobs18cd9ec0-f4ac-4688-a979-75c31a70503e
Creating blob: QuickStart_6f8f29a8-879a-41fb-9db2-0b8595180728.txt
List blobs in the container following continuation token
Blob name: QuickStart_6f8f29a8-879a-41fb-9db2-0b8595180728.txt
Downloading blob to C:/Users/azureuser/Documents/QuickStart_6f8f29a8-879a-41fb-9db2-0b8595180728.txt
Paused, press the Enter key to delete resources created by the sample and exit the application
按 Enter 继续时,示例程序将删除存储容器和本地文件。 在继续之前,请检查 文档 文件夹中的已下载文件。
还可以使用 Azure 存储资源管理器 查看存储帐户中的文件。 Azure 存储资源管理器是免费的跨平台工具,可用于访问存储帐户信息。
验证文件后,按 Enter 键删除测试文件并结束演示。 打开 example.rb 文件查看代码。
了解示例代码
接下来,我们将演练示例代码,以便了解其工作原理。
获取对存储对象的引用
首先要做的是创建用于访问和管理 Blob 存储的对象实例。 这些对象相互依赖和发展。 每一个都被列表中的下一个使用。
- 创建 Azure 存储 BlobService 对象的实例来设置连接凭据。
- 创建 容器 对象,该对象表示要访问的容器。 容器用于组织 Blob 存储,就像使用计算机上的文件夹来组织文件一样。
拥有容器对象后,可以创建一个 块 blob 对象,该对象指向感兴趣的特定 blob。 使用 块 对象创建、下载和复制 Blob。
重要
容器名称必须为小写。 有关容器和 blob 名称的详细信息,请参阅 命名和引用容器、Blob 和元数据。
以下示例代码:
- 创建新容器
- 设置容器的权限,使数据块公开。 容器被称为 quickstartblobs(附加唯一 ID)。
# Create a container
container_name = "quickstartblobs" + SecureRandom.uuid
puts "\nCreating a container: " + container_name
container = blob_client.create_container(container_name)
# Set the permission so the blobs are public
blob_client.set_container_acl(container_name, "container")
在容器中创建 Blob
Blob 存储支持块 Blob、追加 Blob 和页 Blob。 要创建 blob,调用 create_block_blob 方法,并传入 blob 数据。
以下示例在前面创建的容器中创建一个名为 QuickStart_ 的 blob,其中包含唯一 ID 和 .txt 文件扩展名。
# Create a new block blob containing 'Hello, World!'
blob_name = "QuickStart_" + SecureRandom.uuid + ".txt"
blob_data = "Hello, World!"
puts "\nCreating blob: " + blob_name
blob_client.create_block_blob(container.name, blob_name, blob_data)
块 Blob 最大可以达到 4.7 TB,可以包括从电子表格到大型视频文件的任何内容。 页 Blob 主要用于支持 IaaS 虚拟机的 VHD 文件。 追加 Blob 通常用于日志记录,例如,当你需要写入文件并不断添加信息时。
列出容器中的Blob对象
使用 list_blobs 方法获取容器中的文件列表。 以下代码检索 blob 列表,然后显示其名称。
# List the blobs in the container
puts "\nList blobs in the container following continuation token"
nextMarker = nil
loop do
blobs = blob_client.list_blobs(container_name, { marker: nextMarker })
blobs.each do |blob|
puts "\tBlob name: #{blob.name}"
end
nextMarker = blobs.continuation_token
break unless nextMarker && !nextMarker.empty?
end
下载数据块 (Blob)
使用 get_blob 方法将 blob 下载到本地磁盘。 以下代码下载了前面章节中创建的 blob。
# Download the blob
# Set the path to the local folder for downloading
if(is_windows)
local_path = File.expand_path("~/Documents")
else
local_path = File.expand_path("~/")
end
# Create the full path to the downloaded file
full_path_to_file = File.join(local_path, blob_name)
puts "\nDownloading blob to " + full_path_to_file
blob, content = blob_client.get_blob(container_name, blob_name)
File.open(full_path_to_file,"wb") {|f| f.write(content)}
清理资源
如果不再需要 blob,请使用 delete_blob 将其删除。 使用 delete_container 方法删除整个容器。 删除容器也会删除存储在容器中的任何blob。
# Clean up resources, including the container and the downloaded file
blob_client.delete_container(container_name)
File.delete(full_path_to_file)
用于使用 Blob 开发 Ruby 应用程序的资源
请参阅以下用于 Ruby 开发的其他资源:
- 在 GitHub 上查看和下载适用于 Azure 存储的 Ruby 客户端库源代码。
- 浏览使用 Ruby 客户端库编写的 Azure 示例。
- 示例:Ruby 中的 Azure 存储入门
后续步骤
本快速入门介绍了如何使用 Ruby 在 Azure Blob 存储和本地磁盘之间传输文件。 若要详细了解如何使用 Blob 存储,请继续学习存储帐户概述。
有关存储资源管理器和 Blob 的详细信息,请参阅 使用存储资源管理器管理 Azure Blob 存储资源。