迭代给定SAS URL的ADLS2 Azure数据库目录中的文件

x3naxklr  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(128)

我想从ADLS 2存储blob目录下载文件-我只有一个SAS URL指向该目录,我想递归下载该目录中的所有文件。
在给定存储凭据的情况下,如何做到这一点非常清楚,并且有许多示例显示了如何做到这一点-但我找不到任何使用SAS URL的示例。
任何线索或文件链接将不胜感激!

kuhbmx9i

kuhbmx9i1#

我在我的环境中进行了复制,得到了如下预期结果,并从@ROGER ZANDER的Blog中获取了代码:

function DownloadBlob {
    param (
        [Parameter(Mandatory)]
        [string]$URL,
        [string]$Path = (Get-Location)
    )
    
    $uri = $URL.split('?')[0]
    $sas = $URL.split('?')[1]
    $newurl = $uri + "?restype=container&comp=list&" + $sas 
    $body = Invoke-RestMethod -uri $newurl 
    $xml = [xml]$body.Substring($body.IndexOf('<')) 
    $files = $xml.ChildNodes.Blobs.Blob.Name
    $files | ForEach-Object { $_; New-Item (Join-Path $Path (Split-Path $_)) -ItemType Directory -ea SilentlyContinue | Out-Null
        (New-Object System.Net.WebClient).DownloadFile($uri + "/" + $_ + "?" + $sas, (Join-Path $Path $_))
     }
}

然后调用DownloadBlob函数并提供SAS URL。

    • 输出:**

在本地计算机下载的文件中:

mwg9r5ms

mwg9r5ms2#

用途:https://learn.microsoft.com/en-us/dotnet/api/azure.storage.files.datalake.datalakefileclient?view=azure-dotnet
我不知道是否存在从blob存储中下载目录的方法,但你可以创建一个下载文件夹,然后循环下载目录中的所有文件,它有几个步骤:
使用“Datalakeserviceclient”创建服务客户端,以使用SAS访问datalake用途:DataLakeFileClient(Uri, AzureSasCredential)以创建客户端。
然后使用以下命令访问容器用途:数据湖文件系统客户端

fileSystem = CreateFileSystem(client, _containerName)

使用DataLakeDirectoryClient directoryClient = fileSystem.GetDirectoryClient(directoryName);获取目录
要循环浏览目录中的项目,请使用下面的循环:

foreach (PathItem pathItem in directoryClient.GetPaths())
        {
            int pos = pathItem.Name.LastIndexOf("/") + 1;
            DataLakeFileClient fileClient = directoryClient.GetFileClient(pathItem.Name.Substring(pos, pathItem.Name.Length - pos));

            await fileClient.ReadToAsync(downloadpath + @"\" + pathItem.Name);

        }

相关问题