快速入门:使用 Python 上传、下载和列出 Blob

本快速入门介绍如何使用 Python 上传、下载和列出 Azure Blob 存储的容器中的块 Blob。

先决条件

若要访问 Azure 存储,需要一个 Azure 订阅。 如果还没有订阅,则在开始前创建一个 1 元人民币的试用帐户

对 Azure 存储进行的所有访问都要通过存储帐户完成。 对于本快速入门,请使用 Azure 门户、Azure PowerShell 或 Azure CLI 创建存储帐户。 有关如何创建帐户的帮助,请参阅创建存储帐户

请确保已安装下述额外的必备组件:

下载示例应用程序

本快速入门中的示例应用程序是基本的 Python 应用程序。

使用 git 可将应用程序的副本下载到开发环境。

git clone https://github.com/Azure-Samples/storage-blobs-python-quickstart.git 

此命令会将 Azure-Samples/storage-blobs-python-quickstart 存储库克隆到本地 git 文件夹。 若要运行 Python 程序,请在存储库的根目录中打开 example.py 文件。

从 Azure 门户复制凭据

此示例应用程序需要对存储帐户访问进行授权。 以连接字符串形式将存储帐户凭据提供给应用程序。 若要查看存储帐户凭据,请执行以下操作:

  1. 导航到 Azure 门户
  2. 找到自己的存储帐户。
  3. 在存储帐户概述的“设置”部分,选择“访问密钥”。 将显示你的帐户访问密钥和连接字符串。
  4. 请记下存储帐户的名称,进行授权时,需提供该名称。
  5. 找到“key1”下面的“密钥”值,单击“复制”按钮复制该帐户密钥。

    显示如何从 Azure 门户复制帐户密钥的屏幕截图

配置存储连接字符串

在应用程序中,请提供存储帐户名称和帐户密钥,以创建 BlockBlobService 对象。 从 IDE 中的解决方案资源管理器打开 example.py 文件。 连接到中国云时,将 accountnameaccountkey 值替换为自己的帐户名称和密钥,并添加 endpoint_suffix 值。

block_blob_service = BlockBlobService(account_name='accountname', account_key='accountkey', endpoint_suffix='core.chinacloudapi.cn') 

运行示例

此示例在 Documents 文件夹中创建一个测试文件。 示例程序会将该测试文件上传到 Blob 存储,列出容器中的 blob,并使用新名称下载此文件。

首先,通过运行 pip install 安装依赖项:

pip install azure-storage-blob

接下来,运行示例。 会看到类似于以下输出的消息:

Temp file = C:\Users\azureuser\Documents\QuickStart_9f4ed0f9-22d3-43e1-98d0-8b2c05c01078.txt

Uploading to Blob storage as blobQuickStart_9f4ed0f9-22d3-43e1-98d0-8b2c05c01078.txt

List blobs in the container
         Blob name: QuickStart_9f4ed0f9-22d3-43e1-98d0-8b2c05c01078.txt

Downloading blob to C:\Users\azureuser\Documents\QuickStart_9f4ed0f9-22d3-43e1-98d0-8b2c05c01078_DOWNLOADED.txt

继续前,请在 Documents 文件夹中查看这两个文件。 可以打开它们,看它们是否相同。

还可以使用工具(如 Azure 存储资源管理器)查看 Blob 存储中的文件。 Azure 存储资源管理器是免费的跨平台工具,可用于访问存储帐户信息。

验证文件后,按任意键可完成演示并删除测试文件。 了解此示例的用途以后,即可打开 example.py 文件来查看代码。

了解示例代码

让我们逐步查看示例代码,了解其工作方式。

获取对存储对象的引用

首先,请创建对用于访问和管理 Blob 存储的对象的引用。 这些对象相互关联,并且每个对象被列表中的下一个对象使用。

  • 实例化 BlockBlobService 对象,该对象指向存储帐户中的 Blob 服务。

  • 实例化 CloudBlobContainer 对象,该对象代表你正在访问的容器。 容器用于组织 blob,就像使用计算机上的文件夹组织文件一样。

有了云 Blob 容器后,请实例化 CloudBlockBlob 对象(该对象指向你感兴趣的特定 Blob)。 然后即可根据需要上传、下载和复制 Blob。

Important

容器名称必须为小写。 有关容器名称和 Blob 名称的详细信息,请参阅命名和引用容器、Blob 和元数据

此部分将实例化对象,新建容器,然后设置容器的权限,以便 blob 成为公共 blob。 容器名称为 quickstartblobs。

# Create the BlockBlockService that is used to call the Blob service for the storage account
block_blob_service = BlockBlobService(account_name='accountname', account_key='accountkey', endpoint_suffix='core.chinacloudapi.cn')

# Create a container called 'quickstartblobs'.
container_name ='quickstartblobs'
block_blob_service.create_container(container_name) 

# Set the permission so the blobs are public.
block_blob_service.set_container_acl(container_name, public_access=PublicAccess.Container)

将 blob 上传到容器

Blob 存储支持块 blob、追加 blob 和页 blob。 块 blob 最常用,此快速入门中也使用块 blob。

若要将文件上传到 Blob,请通过将本地驱动器上的目录名称和文件名称联接在一起来获取完整的文件路径。 然后可以使用 create\_blob\_from\_path 方法将文件上传到指定的路径。

示例代码创建一个用于上传和下载的本地文件,将要上传的文件存储为 file\_path\_to\_file,将 Blob 的名称存储为 local\_file\_name。 以下示例将文件上传到名为“quickstartblobs”的容器。

# Create a file in Documents to test the upload and download.
local_path=os.path.expanduser("~\Documents")
local_file_name ="QuickStart_" + str(uuid.uuid4()) + ".txt"
full_path_to_file =os.path.join(local_path, local_file_name)

# Write text to the file.
file = open(full_path_to_file,  'w')
file.write("Hello, World!")
file.close()

print("Temp file = " + full_path_to_file)
print("\nUploading to Blob storage as blob" + local_file_name)

# Upload the created file, use local_file_name for the blob name
block_blob_service.create_blob_from_path(container_name, local_file_name, full_path_to_file)

Blob 存储支持多种上传方法。 例如,若有一个内存流,则可使用 create\_blob\_from\_stream 方法而不是 create\_blob\_from\_path 方法。

块 blob 最大可以为 4.7 TB,并且可以是从 Excel 电子表格到大视频文件的任何内容。 页 Blob 主要用于支持 IaaS VM 的 VHD 文件。 追加 blob 用于日志记录,例如有时需要写入到文件,再继续添加更多信息。 存储在 Blob 存储中的大多数对象都是块 blob。

列出容器中的 Blob

使用 list_blobs 方法获取容器中文件的列表。 此方法会返回一个生成器。 下面的代码检索 Blob 列表,然后循环访问它们,显示在容器中找到的 Blob 的名称。

# List the blobs in the container
print("\nList blobs in the container")
generator = block_blob_service.list_blobs(container_name)
for blob in generator:
    print("\t Blob name: " + blob.name)

下载 Blob

使用 the get\_blob\_to\_path 方法将 Blob 下载到本地磁盘。 以下代码将下载前面部分所上传的 blob。 将 _DOWNLOADED 添加为 Blob 名称的前缀后,就可以在本地磁盘上同时看到这两个文件。

# Download the blob(s).
# Add '_DOWNLOADED' as prefix to '.txt' so you can see both files in Documents.
full_path_to_file2 = os.path.join(local_path, string.replace(local_file_name ,'.txt', '_DOWNLOADED.txt'))
print("\nDownloading blob to " + full_path_to_file2)
block_blob_service.get_blob_to_path(container_name, local_file_name, full_path_to_file2)

清理资源

如果不再需要本快速入门中上传的 Blob,可使用 delete\_container 方法删除整个容器。 若要改为删除单个文件,请使用 delete\_blob 方法。

# Clean up resources. This includes the container and the temp files
block_blob_service.delete_container(container_name)
os.remove(full_path_to_file)
os.remove(full_path_to_file2)

用于开发包含 Blob 的 Python 应用程序的资源

若要详细了解如何使用 Blob 存储进行 Python 开发,请参阅下述额外资源:

二进制文件和源代码

客户端库参考和示例

后续步骤

本快速入门介绍了如何使用 Python 在本地磁盘和 Azure Blob 存储之间传输文件。 要深入了解如何使用 Blob 存储,请继续学习 Blob 存储操作说明。

若要详细了解存储资源管理器和 Blob,请参阅使用存储资源管理器管理 Azure Blob 存储资源