在 c# 中的私有访问下无法下载 azure 存储 blob

Trouble downloading azure storage blobs under private access in c#

我完全是 c# 的菜鸟,对 azure api 知之甚少,而且我现在是一名 CS 学生,正在为工作做一个项目。我使用 youtube 教程构建了一些中间件,这些中间件使用字符串连接对存储帐户进行身份验证,并枚举、上传、下载和删除容器中的 blob。我遇到的问题仅在于下载功能,并且仅当存储帐户访问权限设置为私有时。此功能适用于匿名访问。我怀疑问题出在附加 url 上,我不确定如何解决它。如果重要的话,blob 主要是 csv 数据。任何对资源的帮助或指导将不胜感激,这里是相关代码:

url 函数

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);
    }

如果要从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();
    }

如果你想从控制器下载文件字节数组,你可以勾选这个;

如果要设置blob文件public访问级别; https://docs.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-configure.

请注意图片;

或者您可以连接Azure Storage Explorer并选择简单的方式。

我在 Google 上找到了图片,可能会有差异。 :)

您无法从私有容器下载 blob 的原因是您只是从您的方法中返回 blob 的 URL 而没有任何授权信息。必须授权访问私有容器中的 blob。

您需要做的是创建一个 Shared Access Signature (SAS) with at least Read permission and then return that SAS URL. The method you would want to use is 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;
}

这将为您提供一个 link,自创建之日起 5 分钟内有效,并具有读取(下载)blob 的权限。