Create BlobContainerClient from Azure SAS URI



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

var cloudBlockBlob = new CloudBlockBlob(blobSasUri);

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

在库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

事实上,它似乎已经被弃用,取而代之的是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");

更多细节在此链接

最新更新