【问题标题】:Download Blob From Blob Storage Using Python使用 Python 从 Blob 存储下载 Blob
【发布时间】:2021-07-25 17:16:14
【问题描述】:

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

【问题讨论】:

  • 您能否确认TEST.xlsx blob 是否存在于it-dashboards-data blob 容器中?
  • 是的。查了好几遍……
  • 请注意,blob 名称区分大小写。 Blob 应准确命名为 TEST.xlsx
  • 是的..我从 blob URL 复制并粘贴了名称
  • url 是像 https://account.blob.core.windows.net/container/blob 这样的简单 blob URL 还是 SAS URL?

标签: python azure azure-storage azure-blob-storage


【解决方案1】:

事实证明,我还必须在“Storage Blob Data Contributor”之上提供“Reader”访问权限才能识别 Blob。不需要 SAS URL。

【讨论】:

    【解决方案2】:

    您收到此错误的原因是对 Azure Blob 存储的每个请求都必须是经过身份验证的请求。唯一的例外是当您从公共 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

    【讨论】:

    • 有没有办法使用 DefaultAzureCredential() 创建 SAS URL?我只需要使用托管标识下载一个 blob。我已经阅读了该链接,但似乎无法正常工作。
    • 您能否确认托管身份是否适合您?您是在 Azure 中运行代码还是在本地运行代码?
    • 是的,它工作正常。我已经在使用托管标识通过 SQL 进行身份验证。只是我遇到了存储 blob 的问题。我在本地和 Azure 中测试,似乎都有问题
    猜你喜欢
    • 2022-08-02
    • 2019-12-19
    • 2019-09-05
    • 2021-11-19
    • 2020-10-05
    • 2013-01-21
    • 1970-01-01
    • 2015-06-20
    • 2022-11-02
    相关资源
    最近更新 更多