我想从ADLS 2存储blob目录下载文件-我只有一个SAS URL指向该目录,我想递归下载该目录中的所有文件。在给定存储凭据的情况下,如何做到这一点非常清楚,并且有许多示例显示了如何做到这一点-但我找不到任何使用SAS URL的示例。任何线索或文件链接将不胜感激!
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。
在本地计算机下载的文件中:
mwg9r5ms2#
用途:https://learn.microsoft.com/en-us/dotnet/api/azure.storage.files.datalake.datalakefileclient?view=azure-dotnet我不知道是否存在从blob存储中下载目录的方法,但你可以创建一个下载文件夹,然后循环下载目录中的所有文件,它有几个步骤:使用“Datalakeserviceclient”创建服务客户端,以使用SAS访问datalake用途:DataLakeFileClient(Uri, AzureSasCredential)以创建客户端。然后使用以下命令访问容器用途:数据湖文件系统客户端
DataLakeFileClient(Uri, AzureSasCredential)
fileSystem = CreateFileSystem(client, _containerName)
使用DataLakeDirectoryClient directoryClient = fileSystem.GetDirectoryClient(directoryName);获取目录要循环浏览目录中的项目,请使用下面的循环:
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); }
2条答案
按热度按时间kuhbmx9i1#
我在我的环境中进行了复制,得到了如下预期结果,并从@ROGER ZANDER的Blog中获取了代码:
然后调用DownloadBlob函数并提供SAS URL。
在本地计算机下载的文件中:
mwg9r5ms2#
用途:https://learn.microsoft.com/en-us/dotnet/api/azure.storage.files.datalake.datalakefileclient?view=azure-dotnet
我不知道是否存在从blob存储中下载目录的方法,但你可以创建一个下载文件夹,然后循环下载目录中的所有文件,它有几个步骤:
使用“Datalakeserviceclient”创建服务客户端,以使用SAS访问datalake用途:
DataLakeFileClient(Uri, AzureSasCredential)
以创建客户端。然后使用以下命令访问容器用途:数据湖文件系统客户端
使用
DataLakeDirectoryClient directoryClient = fileSystem.GetDirectoryClient(directoryName);
获取目录要循环浏览目录中的项目,请使用下面的循环: