我有天蓝色的 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 密钥的图像标签?
是否有任何选项可以在应用程序上使用已通过身份验证的用户并使用没有 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 令牌:
images public
或使用 SAS-based links
来控制对它们的访问。正如大卫提到的,选择取决于您的要求。如果您需要控制对图像的访问并可以处理性能影响,那么直接从后端 Web 应用程序流式传输内容可能是最佳选择。如果性能是您的首要任务,并且您愿意公开图像或使用基于 SAS 的链接,那么提供图像的 URI 可能是更好的选择。