使用 Python 从 Blob 存储下载 Blob

时间:2021-05-03 09:24:47

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

我正在尝试在 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)

2 个答案:

答案 0 :(得分:0)

您收到此错误的原因是对 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

答案 1 :(得分:0)

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