You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改AzureBlobService代码以通过SAS令牌连接Azure CDN文件夹

如何通过SAS令牌修改AzureBlobService连接Azure CDN文件夹?

原代码

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

namespace AzureBlob.API.Service
{
    public class AzureBlobService
    {
        BlobServiceClient _blobClient;
        BlobContainerClient _containerClient;
        string azureConnectionString = "<Primary Connection String>";
        public AzureBlobService()
        {
            _blobClient = new BlobServiceClient(azureConnectionString);
            _containerClient = _blobClient.GetBlobContainerClient("apiimages");
        }

        public async Task<List<Azure.Response<BlobContentInfo>>> UploadFiles(List<IFormFile> files)
        {

            var azureResponse = new List<Azure.Response<BlobContentInfo>>();
            foreach (var file in files)
            {
                string fileName = file.FileName;
                using (var memoryStream = new MemoryStream())
                {
                    file.CopyTo(memoryStream);
                    memoryStream.Position = 0;
                    var client = await _containerClient.UploadBlobAsync(fileName, memoryStream, default);
                    azureResponse.Add(client);
                }
            };

            return azureResponse;
        }

        public async Task<List<BlobItem>> GetUploadedBlobs()
        {
            var items = new List<BlobItem>();
            var uploadedFiles = _containerClient.GetBlobsAsync();
            await foreach (BlobItem file in uploadedFiles)
            {
                items.Add(file);
            }

            return items;
        }
    }
}

修改方案

要通过SAS令牌连接,核心是直接使用包含SAS令牌的容器URL初始化BlobContainerClient,不再依赖存储账户连接字符串。具体修改如下:

  1. 移除BlobServiceClient依赖:SAS令牌是针对特定容器(或Blob)的授权凭证,不需要通过BlobServiceClient中转,直接操作BlobContainerClient即可。
  2. 替换初始化逻辑:用容器URL(格式如https://<存储账户名>.blob.core.windows.net/<容器名>?<SAS令牌>)来创建BlobContainerClient。
  3. 优化配置方式:建议从配置文件读取容器URL和SAS令牌,避免硬编码,提升安全性和灵活性。

修改后的完整代码

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Microsoft.AspNetCore.Http;

namespace AzureBlob.API.Service
{
    public class AzureBlobService
    {
        private readonly BlobContainerClient _containerClient;

        // 推荐从配置注入容器URL(含SAS令牌),而非硬编码
        public AzureBlobService(string containerSasUrl)
        {
            // 直接用包含SAS令牌的容器URL初始化客户端
            _containerClient = new BlobContainerClient(new Uri(containerSasUrl));
        }

        public async Task<List<Azure.Response<BlobContentInfo>>> UploadFiles(List<IFormFile> files)
        {
            var azureResponse = new List<Azure.Response<BlobContentInfo>>();
            foreach (var file in files)
            {
                string fileName = file.FileName;
                using (var memoryStream = new MemoryStream())
                {
                    await file.CopyToAsync(memoryStream);
                    memoryStream.Position = 0;
                    var response = await _containerClient.UploadBlobAsync(fileName, memoryStream, default);
                    azureResponse.Add(response);
                }
            }

            return azureResponse;
        }

        public async Task<List<BlobItem>> GetUploadedBlobs()
        {
            var items = new List<BlobItem>();
            await foreach (BlobItem blob in _containerClient.GetBlobsAsync())
            {
                items.Add(blob);
            }

            return items;
        }
    }
}

关键注意事项

  • SAS令牌权限:确保你的SAS令牌包含所需权限:
    • 上传文件需要Write或Create权限
    • 列出Blob需要List权限
  • 容器URL格式:必须是完整的容器地址加上SAS令牌,示例:https://mystorageaccount.blob.core.windows.net/apiimages?sv=2023-11-03&ss=b&srt=c&sp=rwl&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxxxxx
  • 配置注入:在实际项目中,建议通过appsettings.json存储容器SAS URL,然后依赖注入到服务中,避免硬编码敏感信息。

内容的提问来源于stack exchange,提问作者Destroyer_12321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:55:16