我有一个名为images
的图像目录,其中包含以下图像文件:
imgages
--0001.png
--0002.jpg
--0003.png
现在,我想将此目录上传到具有相同文件结构的Azure Blob存储中。我查看了给出的here和here的示例代码,但是:
azure-blob-storage
,该软件包中也没有BlobService
这样的东西。答案 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的屏幕截图。
有关适用于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/中找到它。
$ virtualenv test
$ cd test
$ Scripts\active
$ 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))