使用Python从Blob存储下载Blob

使用Python从Blob存储下载Blob,python,azure,azure-storage,azure-storage-blobs,Python,Azure,Azure Storage,Azure Storage Blobs,我正试图下载一个blob上的excel文件。但是,它会不断生成错误“指定的blob不存在”。此错误发生在blob_客户端。尽管我可以获取blob_客户端,但请下载\u blob()。你知道为什么我可以使用托管身份进行连接或以其他方式进行连接吗 default_credential = DefaultAzureCredential() blob_url = BlobServiceClient('url', credential = default_credential) contain

我正试图下载一个blob上的excel文件。但是,它会不断生成错误“指定的blob不存在”。此错误发生在blob_客户端。尽管我可以获取blob_客户端,但请下载\u blob()。你知道为什么我可以使用托管身份进行连接或以其他方式进行连接吗

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,并且由于您发送的是未经验证的请求,因此会出现此错误

我建议对具有
Read
权限的blob使用
共享访问签名(SAS)URL
,而不是简单的blob URL。由于SAS URL在URL本身(
sig
部分)中嵌入了授权信息,因此只要SAS有效且未过期,您就应该能够下载blob


有关共享访问签名的更多信息,请参见此页。

事实证明,我还必须在“存储Blob Data Contributor”之上提供“Reader”访问,以便能够识别Blob。不需要SAS URL。

您能否确认
TEST.xlsx
blob是否存在于
it仪表板数据
blob容器中?是的。检查了多次…请注意blob名称区分大小写。Blob应该准确命名为
TEST.xlsx
。是的。我从Blob url复制并粘贴了名称是
url
类似
https://account.blob.core.windows.net/container/blob
还是SAS URL?是否有方法使用DefaultAzureCredential()创建SAS URL?我必须使用托管标识下载一个blob。我已经阅读了链接,但似乎无法使其工作。您能否确认托管标识是否适用于您?您是在Azure中运行代码还是在本地运行代码?是的,它工作正常。我已经在使用托管标识进行SQL身份验证。只是我遇到了存储blob的问题。我在本地和Azure中进行测试,两者似乎都有问题