微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Python 从 Blob 存储下载 Blob

如何解决使用 Python 从 Blob 存储下载 Blob

我正在尝试在 blob 上下载 excel 文件。但是,它不断生成错误“指定的 blob 不存在”。这个错误发生在 blob_client.download_blob() 虽然我可以得到 blob_client。知道为什么或我可以使用托管身份连接的其他方式吗?

default_credential = DefaultAzureCredential()
 
blob_url = BlobServiceClient('url',credential = default_credential)
   
container_client = blob_url.get_container_client('xx-xx-data')

blob_client = container_client.get_blob_client('TEST.xlsx')

downloaded_blob = blob_client.download_blob()

df=pd.read_excel(downloaded_blob.content_as_bytes(),sheet_name='Test',skiprows=2)

解决方法

您收到此错误的原因是对 Azure Blob 存储的每个请求都必须是经过身份验证的请求。唯一的例外是当您从公共 blob 容器读取(下载)blob 时。很可能,保存此 blob 的 blob 容器具有 Private ACL,并且由于您发送的是未经身份验证的请求,因此您会收到此错误。

我建议对具有 Shared Access Signature (SAS) URL 权限的 blob 使用 Read,而不是简单的 blob URL。由于 SAS URL 在 URL 本身(sig 部分)中嵌入了授权信息,如果 SAS 有效且未过期,您应该能够下载 blob。

有关共享访问签名的更多信息,请参阅此处:https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature

,

事实证明,我还必须在“存储 Blob 数据贡献者”之上提供“读者”访问权限才能识别 Blob。不需要 SAS URL。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。