我想使用共享访问签名SAS下载blob。
我还希望能够删除活动的SAS URI,如果我理解正确的话,我必须使用存储访问策略。
令我困惑的是我如何删除政策。我还读到你只能有5个存储的访问策略?
我的目标是能够删除活动的SAS URI。我能想到实现这一目标的唯一方法是删除SAS URI链接的策略,对吧?如果我的blob存储中有超过数百个文件,我可以在世界上如何使用它?我不能为每个blob制定一个政策吗? 5是最高政策?
此代码演示了我如何添加策略以及如何创建使用此策略的SAS URI,用户可以从中下载。
static void CreateSharedAccessPolicy(CloudBlobContainer container)
{
//Create a new stored access policy and define its constraints.
SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(10),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List
};
//Get the container's existing permissions.
BlobContainerPermissions permissions = new BlobContainerPermissions();
//Add the new policy to the container's permissions.
permissions.SharedAccessPolicies.Clear();
permissions.SharedAccessPolicies.Add("PolicyName", sharedPolicy);
container.SetPermissions(permissions);
}
static string GetBlobSasUriWithPolicy(CloudBlobContainer container, string policyName)
{
//Get a reference to a blob within the container.
CloudBlockBlob blob = container.GetBlockBlobReference("file_name");
//Generate the shared access signature on the blob.
string sasBlobToken = blob.GetSharedAccessSignature(null, "PolicyName");
//Return the URI string for the container, including the SAS token.
return blob.Uri + sasBlobToken;
}
最后一个问题,如何删除政策?它是如此简单:
permissions.SharedAccessPolicies.Remove("PolicyName");
答案 0 :(得分:3)
我的目标是能够删除活动的SAS URI。唯一的方法我 可以想到完成这个就是删除SAS的政策 URI链接,对吗?
部分正确。删除访问策略是一种方法。其他方法是更改策略的名称(策略标识符)。例如,如果策略标识符为mypolicy
,则将其更改为mypolicy1
将与删除策略具有相同的效果。
如果我的blob存储中有超过数百个文件,那么世界上有多少文件 我可以做这个吗?
您可能已经知道,访问策略是在blob容器级别定义的,而不是在blob级别定义的。删除/使访问策略无效将使该容器中所有blob的SAS URL无效。
我不能为每个blob设置一个策略吗? 5是最大值 策略?
这是正确的。
最后一个问题,如何删除政策?它是如此简单: permissions.SharedAccessPolicies.Remove( “PolicyName”);
这是正确的。确保你保存回来。你可以使用类似的东西:
var cloudStorageAccount = CloudStorageAccount.DevelopmentStorageAccount;
var blobClient = cloudStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("container-name");
var containerPermissions = container.GetPermissions();
containerPermissions.SharedAccessPolicies.Remove("access-policy-id");
container.SetPermissions(containerPermissions);