Python 获取返回空dict的存储blob的属性
我刚刚上传了5GB的数据,希望验证MD5总和是否匹配。我已经计算了文件的本地副本,但是从Azure获取ContentMD5时遇到问题。到目前为止,我得到了一个空的dict,但我可以看到blob的名称。目前我将其限制为前10项,只是为了调试。我知道Azure上的MD5与典型的md5sum调用不同,并且允许本地调用。但是,目前我看不到任何blob属性。当我通过Azure控制台浏览时,这些属性就在那里(就像ContentMD5属性一样) 我哪里做错了 这是我目前的代码:Python 获取返回空dict的存储blob的属性,python,azure,azure-storage,azure-storage-blobs,Python,Azure,Azure Storage,Azure Storage Blobs,我刚刚上传了5GB的数据,希望验证MD5总和是否匹配。我已经计算了文件的本地副本,但是从Azure获取ContentMD5时遇到问题。到目前为止,我得到了一个空的dict,但我可以看到blob的名称。目前我将其限制为前10项,只是为了调试。我知道Azure上的MD5与典型的md5sum调用不同,并且允许本地调用。但是,目前我看不到任何blob属性。当我通过Azure控制台浏览时,这些属性就在那里(就像ContentMD5属性一样) 我哪里做错了 这是我目前的代码: import os from
import os
from os import sys
from azure.storage.blob import BlobServiceClient
def remote_check(connection_str):
blob_service_client = BlobServiceClient.from_connection_string(connection_str)
container_name = "global"
container = blob_service_client.get_container_client(container=container_name)
blob_list = container.list_blobs()
count = 0
for blob in blob_list:
if count < 10:
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob)
a = blob_client.get_blob_properties()
print(a.metadata)
print("Blob name: " + str(blob_client.blob_name))
count = count + 1
else:
break
def main():
try:
CONNECTION_STRING = os.environ['AZURE_STORAGE_CONNECTION_STRING']
remote_check(CONNECTION_STRING)
except KeyError:
print("AZURE_STORAGE_CONNECTION_STRING must be set.")
sys.exit(1)
if __name__ == '__main__':
main()
导入操作系统
从操作系统导入系统
从azure.storage.blob导入BlobServiceClient
def远程检查(连接):
blob\u服务\u客户端=BlobServiceClient.from\u连接\u字符串(连接\u str)
容器名称=“全局”
container=blob\u service\u client.get\u container\u client(container=container\u name)
blob_list=container.list_blobs()
计数=0
对于blob_列表中的blob:
如果计数小于10:
blob\u client=blob\u service\u client.get\u blob\u client(container=container\u name,blob=blob)
a=blob_客户端。获取blob_属性()
打印(a.元数据)
打印(“Blob name:+str(Blob_client.Blob_name))
计数=计数+1
其他:
打破
def main():
尝试:
CONNECTION\u STRING=os.environ['AZURE\u STORAGE\u CONNECTION\u STRING']
远程检查(连接字符串)
除KeyError外:
打印(“必须设置AZURE\存储\连接\字符串”)
系统出口(1)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
也许您可以使用rest(例如,使用rest客户端,如postman)调用检查blob属性,如下所述:
“Content-MD5”作为HTTP响应头返回。请确保您使用的是最新版本的软件包 某些属性位于
content\u设置中
,例如,要获取content\u md5
,应使用以下代码:
a=blob_client.get_blob_properties()
print(a.content_settings.content_md5)
以下是我的测试结果:
我不是Azure管理员,没有访问命令az ad sp create for rbac-n“myaccount”的权限。我可以确认这是有效的。这是azure的bug,还是纯粹的欺骗谢谢你的邀请reply@Adam,这不是一个bug。这应该是这些新软件包中的更改。如果有帮助,请接受它作为答案:)。非常感谢@Ivan Yang。答案被接受。如果不是bug,那么文档可能已经过时了?@Adam,你能给我提供链接吗?@Adam,文档是正确的,但是有些属性仍然需要重新提取。当你查看文档时,它实际上返回了,你可以发现它已经返回了。