使用python

时间:2019-09-06 06:34:38

标签: python azure azure-storage azure-storage-blobs

我有一个名为images的图像目录,其中包含以下图像文件:

imgages
    --0001.png
    --0002.jpg
    --0003.png

现在,我想将此目录上传到具有相同文件结构的Azure Blob存储中。我查看了给出的herehere的示例代码,但是:

  1. 即使安装了azure-blob-storage,该软件包中也没有BlobService这样的东西。
  2. 在任何地方都清楚地记录了如何执行此操作吗?

4 个答案:

答案 0 :(得分:0)

它在您链接的文档中。

不是BlobService,而是BlobClient。

from azure.storage.blob import BlobClient

blob = BlobClient.from_connection_string("my_connection_string", container="mycontainer", blob="my_blob")

with open("./SampleSource.txt", "rb") as data:
    blob.upload_blob(data)

答案 1 :(得分:0)

这是我的示例代码对我来说很好。

import os
from azure.storage.blob import BlockBlobService

root_path = '<your root path>'
dir_name = 'images'
path = f"{root_path}/{dir_name}"
file_names = os.listdir(path)

account_name = '<your account name>'
account_key = '<your account key>'
container_name = '<your container name, such as `test` for me>'

block_blob_service = BlockBlobService(
    account_name=account_name,
    account_key=account_key
)

for file_name in file_names:
    blob_name = f"{dir_name}/{file_name}"
    file_path = f"{path}/{file_name}"
    block_blob_service.create_blob_from_path(container_name, blob_name, file_path)

下图的结果是Azure Storage Explorer的屏幕截图。

enter image description here

有关适用于Python的Azure存储SDK的API引用的更多详细信息,请参阅https://azure-storage.readthedocs.io/index.html


更新:我使用的Python版本是Windows上的Python 3.7.4,所需的软件包是azure-storage==0.36.0,您可以从https://pypi.org/project/azure-storage/中找到它。

  1. $ virtualenv test
  2. $ cd test
  3. $ Scripts\active
  4. $ pip install azure-storage

然后,您可以在当前的Python虚拟环境中通过python upload_images.py运行我的示例代码。

答案 2 :(得分:0)

当前有azure.storage.blob的两个版本。如果创建Azure VM并在那里处理数据,则可以使用其中任何一个结束。

较早的版本需要(如Adam Marczak所指出的):

from azure.storage.blob import BlobClient

blob = BlobClient.from_connection_string("my_connection_string", container="mycontainer", blob="my_blob")

with open("./SampleSource.txt", "rb") as data:
    blob.upload_blob(data)

而较新:

from azure.storage.blob import BlockBlobService

blob_service = BlockBlobService(account_name, account_key)

blob_service.create_blob_from_path(
    container_name, blob_name ,  full_file_path )

答案 3 :(得分:0)

显然,最新的python SDK [1]中不存在 create_blob_from_bytes 和BlockBlobService,除非您正在管理各种软件包的版本,否则默认情况下不会获得。

我假设您可能希望将其作为独立脚本执行。因此,您可以使用 AzureCliCredential [2]进行身份验证,并通过SDK中提供的方法检索必要的资源终结点。

下面的代码在Azure函数中不起作用。

    from azure.storage.blob import (
       BlobServiceClient,
       ContentSettings
    )

    storage_connection_string='DefaultEndpointsProtocol=https;AccountName=<STORAGE_ACCOUNT_NAME>;AccountKey=<ACCOUNT_KEY>;EndpointSuffix=core.windows.net'
    container_name =
    blob_service_client = BlobServiceClient.(
        conn_str=storage_connection_string
        )
    logging.debug(f'getting client for container : {container_name}')
    container_client = 
    blob_service_client.get_container_client(container=container_name)
    blob_client = container_client.get_blob_client(blob_name)
    if blob_client.exists():
        blob_client.delete_blob()
    blob_client =blob_service_client.get_blob_client(container=container_name, 
    blob=blob_name)
    try:
        with open(filename, "rb") as data:
             blob.upload(data)
        content_settings =ContentSettings(content_type='image/png')
        logging.debug(f'setting the content type : {content_settings}')
    except Exception as e:
        logging.error(str(e))

[1] https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python

[2] https://docs.microsoft.com/en-us/python/api/azure-identity/azure.identity.azureclicredential?view=azure-python