【问题标题】:Create BlobContainerClient from Azure SAS URI从 Azure SAS URI 创建 BlobContainerClient
【发布时间】:2023-04-04 15:36:01
【问题描述】:

在 Microsoft.Azure.Storage.Blob 库中,您可以使用 SAS URI 创建 Blob 上传客户端。

var cloudBlockBlob = new CloudBlockBlob(blobSasUri);

但是,此库已被弃用,取而代之的是 Azure.Storage.Blobs。我不确定如何使用 SAS URI 创建 BlobContainerClient 的实例,因为该类的构造函数都不允许使用 URI 参数。这甚至可能吗?还是我只需要使用 HttpClient 来调用 Blob 服务?

【问题讨论】:

    标签: c# azure azure-blob-storage


    【解决方案1】:

    在库Azure.Storage.Blobs 中,您可以使用此构造函数创建BlobContainerClient 实例:

    public BlobContainerClient(Uri blobContainerUri, BlobClientOptions options = null);

    例如,您有一个container sas uri,如下所示:

    "https://xxx.blob.core.windows.net/mycontainer111?sv=2019-12-12&ss=bfqt&srt=sco&sp=rwdlacupx&se=2020-10-27T08:45:57Z&st=2020-10-27T00:45:57Z&spr=https&sig=xxxxxx";
    

    然后你可以使用下面的代码创建BlobContainerClient实例:

            string sasuri = "https://xxx.blob.core.windows.net/mycontainer111?sv=2019-12-12&ss=bfqt&srt=sco&sp=rwdlacupx&se=2020-10-27T08:45:57Z&st=2020-10-27T00:45:57Z&spr=https&sig=xxxxxx";
            Uri container_uri = new Uri(sasuri);
            var container_client = new BlobContainerClient(container_uri);
    
            //other code
    

    【讨论】:

      【解决方案2】:

      确实,它似乎已被弃用,取而代之的是 Azure.Storage.Blobs。

      您需要从要上传到的容器中创建对CloudBlobContainer 的引用:

      var connectionString = String.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}",
          storageAccountName, // your storage account name
          accessKey); // your storage account access key
      
      var storageAccount = CloudStorageAccount.Parse(connectionString);
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
      CloudBlobContainer container = blobClient.GetContainerReference("my-container");
      

      指定和检索 sas URI

      SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();
      sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(30);
      sasConstraints.Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create;
      
      var sasUri = blob.GetSharedAccessSignature(sasConstraints);
      

      上传文件:

      var cloudBlockBlob = new CloudBlockBlob(new Uri(sasUri));
      await cloudBlockBlob.UploadFromFileAsync(@"c:\myfile.txt");
      

      更多详情请看link

      【讨论】:

      • CloudBlockBlob 不是 Microsoft.Azure.Storage.Blob 的一部分吗?
      • 是的,它是 Microsoft.Azure.Storage.Blob 的一部分
      猜你喜欢
      • 2020-03-18
      • 2021-06-09
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      相关资源
      最近更新 更多