我有容器名称及其文件夹结构。我需要使用python代码下载容器中单个文件夹中的所有文件。我还有一个指向这个特定文件夹的SAS URL链接。
我发现的method在线使用BlockBlobService
类,它是旧SDK的一部分。我需要找到一种使用当前SDK来实现它的方法。
你能帮帮我吗?
编辑1:
这是我的SAS网址:https://xxxx.blob.core.windows.net/<CONTAINER>/<FOLDER>?sp=r&st=2022-05-31T17:49:47Z&se=2022-06-05T21:59:59Z&sv=2020-08-04&sr=c&sig=9M8ql9nYOhEYdmAOKUyetWbCU8hoWS72UFczkShdbeY%3D
编辑2:
添加到找到的方法的链接。
编辑3:
我也有我想下载的文件的完整路径。
发布于 2022-06-01 16:04:53
请尝试此代码(但未经测试)。
下面的代码基本上解析了SAS并创建了一个ContainerClient
实例。然后,它将列出容器名称中的blobs,其中以文件夹名称开头。一旦你有了这个列表,你就可以下载单个的blobs。
我注意到您的SAS只具有read
权限(sp=r
)。请注意,您需要read
和list
权限(sp=rl
)。您需要使用这两个权限请求新的SAS URL。
from urllib.parse import urlparse
from azure.storage.blob import ContainerClient
sasUrl = "https://xxxx.blob.core.windows.net/<CONTAINER>/<FOLDER>?sp=r&st=2022-05-31T17:49:47Z&se=2022-06-05T21:59:59Z&sv=2020-08-04&sr=c&sig=9M8ql9nYOhEYdmAOKUyetWbCU8hoWS72UFczkShdbeY%3D"
sasUrlParts = urlparse(sasUrl)
accountEndpoint = sasUrlParts.scheme + '://' + sasUrlParts.netloc
sasToken = sasUrlParts.query
pathParts = sasUrlParts.path.split('/')
containerName = pathParts[1]
folderName = pathParts[2]
containerClient = ContainerClient(accountEndpoint, containerName, sasToken)
blobs = containerClient.list_blobs(folderName)
for blob in blobs_list:
blobClient = containerClient.get_blob_client(blob)
download the blob here...blobClient.download()
更新
我有上面提到的SAS,以及我想下载的文件的完整路径。例如:路径1:容器/文件夹/file1.csv,路径2:容器/文件夹/file2.txt,等等
请参阅以下代码:
from urllib.parse import urlparse
from azure.storage.blob import BlobClient
sasUrl = "https://xxxx.blob.core.windows.net/<CONTAINER>/<FOLDER>?sp=r&st=2022-05-31T17:49:47Z&se=2022-06-05T21:59:59Z&sv=2020-08-04&sr=c&sig=9M8ql9nYOhEYdmAOKUyetWbCU8hoWS72UFczkShdbeY%3D"
blobNameWithContainer = "Container/folder/file1.csv"
sasUrlParts = urlparse(sasUrl)
accountEndpoint = sasUrlParts.scheme + '://' + sasUrlParts.netloc
sasToken = sasUrlParts.query
blobSasUrl = accountEndpoint + '/' + blobNameWithContainer + '?' + sasToken;
blobClient = BlobClient.from_blob_url(blobSasUrl);
.... now do any operation on that blob ...
https://stackoverflow.com/questions/72464304
复制相似问题