使用 Python 从 Blob 存储下载 Blob
Download Blob From Blob Storage Using Python
我正在尝试下载 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 存储的每个请求都必须是经过身份验证的请求。唯一的例外是当您从 public blob 容器读取(下载)blob 时。很可能,保存此 blob 的 blob 容器具有 Private
ACL,并且由于您发送的是未经身份验证的请求,因此您会收到此错误。
我建议对具有 Read
权限的 blob 使用 Shared Access Signature (SAS) URL
而不是简单的 blob URL。由于 SAS URL 在 URL 本身(sig
部分)中嵌入了授权信息,如果 SAS 有效且未过期,您应该能够下载 blob。
有关共享访问签名的更多信息,请参阅此内容:https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature。
事实证明,我还必须在 'Storage Blob Data Contributor' 之上提供 'Reader' 访问权限才能识别 blob。不需要 SAS URL.
我正在尝试下载 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 存储的每个请求都必须是经过身份验证的请求。唯一的例外是当您从 public blob 容器读取(下载)blob 时。很可能,保存此 blob 的 blob 容器具有 Private
ACL,并且由于您发送的是未经身份验证的请求,因此您会收到此错误。
我建议对具有 Read
权限的 blob 使用 Shared Access Signature (SAS) URL
而不是简单的 blob URL。由于 SAS URL 在 URL 本身(sig
部分)中嵌入了授权信息,如果 SAS 有效且未过期,您应该能够下载 blob。
有关共享访问签名的更多信息,请参阅此内容:https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature。
事实证明,我还必须在 'Storage Blob Data Contributor' 之上提供 'Reader' 访问权限才能识别 blob。不需要 SAS URL.