我是一個完整的 c# 菜鳥,對 azure apis 和當前的 cs 學生知之甚少。我使用 youtube 教程構建了一些中間件,這些中間件使用字串連接對存盤帳戶進行身份驗證,并列舉、上傳、下載和洗掉容器中的 blob。我遇到的問題僅在于下載功能并且僅當存盤帳戶訪問權限設定為私有時。此功能適用于匿名訪問。我懷疑問題出在附加網址上,我不知道如何解決。如果重要的話,這些 blob 主要是 csv 資料。任何對資源的幫助或指導將不勝感激??這里是相關代碼:
網址功能
public async Task<string> GetBlob(string name, string containerName)
{
var containerClient = _blobClient.GetBlobContainerClient(containerName);
var blobClient = containerClient.GetBlobClient(name);
return blobClient.Uri.AbsoluteUri;
}
組態檔
"AllowedHosts": "*",
"BlobConnection" : "<mystringconnection>******==;EndpointSuffix=core.windows.net"
動作請求
[HttpGet]
public async Task<IActionResult> ViewFile(string name)
{
var res = await _blobService.GetBlob(name, "<mystorageacc>");
return Redirect(res);
}
uj5u.com熱心網友回復:
如果要從 blob 服務下載;
public async Task<byte[]> ReadFileAsync(string path)
{
using var ms = new MemoryStream();
var blob = _client.GetBlobClient(path);
await blob.DownloadToAsync(ms);
return ms.ToArray();
}
如果你想從控制器下載檔案位元組陣列,你可以檢查這個;

或者,您可以連接

我在谷歌上找到了圖片,可能存在差異。:)
uj5u.com熱心網友回復:
您無法從私有容器下載 blob 的原因是您只是從方法中回傳 blob 的 URL,而沒有任何授權資訊。訪問私有容器中的 blob 的請求必須經過授權。
您需要做的是創建一個Shared Access Signature (SAS)至少具有Read權限的,然后回傳該 SAS URL。您要使用的方法是GenerateSasUri. 您的代碼將類似于:
public async Task<string> GetBlob(string name, string containerName)
{
var containerClient = _blobClient.GetBlobContainerClient(containerName);
var blobClient = containerClient.GetBlobClient(name);
return blobClient.GenerateSasUri(BlobSasPermissions.Read, DateTime.UtcNow.AddMinutes(5)).Uri.AbsoluteUri;
}
這將為您提供一個鏈接,該鏈接自創建之日起 5 分鐘內有效,并有權讀取(下載)blob。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416837.html
標籤:
