[英]Iterate the files in an ADLS2 Azure Datalake Directory given a SAS url
我想從 ADLS2 存儲 blob 目錄下載文件 - 我只有一個 SAS url 到所述目錄,我想遞歸下載該目錄中的所有文件。
很清楚如何在給定存儲憑據的情況下執行此操作,並且有很多示例說明如何執行此操作 - 但我找不到任何使用 SAS url 的示例。
任何線索或文檔鏈接將不勝感激!
我在我的環境中進行了重現,得到了如下預期結果,並且我從@ROGER ZANDER 的博客中獲取了代碼:
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。
輸出:
在本地機器下載的文件中:
使用: https ://learn.microsoft.com/en-us/dotnet/api/azure.storage.files.datalake.datalakefileclient?view=azure-dotnet
我不知道它是否存在從 blob 存儲下載目錄的方法。 但是可以創建一個下載文件夾,循環下載目錄下的所有文件。 這是幾個步驟:
使用“Datalakeserviceclient”創建服務客戶端以使用 SAS 訪問 datalake 使用: DataLakeFileClient(Uri, AzureSasCredential)
創建客戶端。
然后訪問容器使用:DataLakeFileSystemClient
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.