Azure net 6 mvc - 从 blob 存储获取图像

问题描述 投票:0回答:1

我有天蓝色的 blob 存储来存储在 AppService 上运行的 MVC 应用程序的图像,我需要最好的方法来存储不同画廊的图像。

我在数据库中有定义,如 ImageName |例如 Galery_Id 我将运行一些ajax来通过Galery_Id从数据库获取数据

现在我有所有图像名称(每个画廊大约 150-250 张图像) 但我需要最好、最快的方式在前端渲染,并在后端有类似的静态函数,将从 azure blob 中一一检索它们,这似乎有点慢而且很复杂

public static string GetImagesFromBlob(string name)
{
    BlobServiceClient blobServiceClient = new BlobServiceClient("");

    blobContainer = blobServiceClient.GetBlobContainerClient(blobContainerName);
    blobContainer.CreateIfNotExistsAsync(PublicAccessType.Blob);

    List<Uri> allBlobs = new List<Uri>();
    foreach (BlobItem blob in blobContainer.GetBlobs())
    {
        if (blob.Properties.BlobType == BlobType.Block)
            allBlobs.Add(blobContainer.GetBlobClient(blob.Name).Uri);
    }
    return "";

}

其实我不想使用SAS键。

是否有任何选项可以在应用程序上使用已通过身份验证的用户并使用没有 SAS 密钥的图像标签?

azure model-view-controller razor azure-blob-storage .net-6.0
1个回答
0
投票

是否有任何选项可以在应用程序上使用已通过身份验证的用户并使用没有 SAS 密钥的图像标签?

是的,您可以使用

Microsoft Azure AD
对 MVC 应用程序中的用户进行身份验证,然后使用 Azure Blob 存储 SDK 访问存储帐户。

在门户中创建应用程序注册并从应用程序中获取

client ID
tenant ID
client secret
。将
Storage Blob Data Contributor
角色分配给存储帐户以访问 Azure Blob 存储。

这里是使用 .NET 获取带有

ClientSecretCredential
的 Blob 名称列表的代码。

using Azure.Identity;
using Azure.Storage.Blobs;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            string tenantId = "your-tenant-id";
            string clientId = "your-client-id";
            string clientSecret = "your-client-secret";
            string accountName = "your-account-name";
            string containerName = "your-container-name";

            var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
            var blobServiceClient = new BlobServiceClient(new Uri($"https://{accountName}.blob.core.windows.net"), credential); 
            var containerClient = blobServiceClient.GetBlobContainerClient(containerName);

            foreach (var blobItem in containerClient.GetBlobs())
            {
                Console.WriteLine(blobItem.Name);
            }
        }
    }
}

输出:

imp.png
sample3.txt
sample345.txt
test.xlsx

但我同意 David Makogon 的评论,

后端应用程序:

  • 如果您决定直接从
    backend web app
    流式传输内容,您可以使用
    Azure Blob Storage SDK
    访问您的存储帐户并检索图像。
  • 此方法可让您验证用户身份并管理对图像的访问。但是,请注意,所有数据流量都将通过您的应用程序,这可能会影响其性能。 (这会增加响应时间并降低应用程序的吞吐量)。

SAS 令牌:

  • 如果您选择为图像提供 URI,浏览器将直接从 Azure 存储获取它们,这可以减少响应时间并提高应用程序的吞吐量。
  • 但是,您需要创建
    images public
    或使用
    SAS-based links
    来控制对它们的访问。

正如大卫提到的,选择取决于您的要求。如果您需要控制对图像的访问并可以处理性能影响,那么直接从后端 Web 应用程序流式传输内容可能是最佳选择。如果性能是您的首要任务,并且您愿意公开图像或使用基于 SAS 的链接,那么提供图像的 URI 可能是更好的选择。

参考: 使用 Microsoft Entra ID 授权对 blob 的访问 - Azure 存储 |微软学习

© www.soinside.com 2019 - 2024. All rights reserved.