使用CreateIfNotExists()
创建blob容器后,我立即调用SetPermissions()
以允许用户公开访问容器中的blob,但不能访问容器本身。
像这样:
CloudBlobContainer pdfContainer = blobClient.GetContainerReference(ContainerName.PDFs);
if (pdfContainer.CreateIfNotExists())
pdfContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
容器已成功创建,但是当我登录Azure门户时,blob容器权限为Private
。
我是否错过了额外调用以提交权限更改?我看过的所有例子都没有显示出来,我也没有在文档中看到任何内容。我正在使用Azure SDK的v2.0。
更新
看起来CreateIfNotExists()
总是返回false。我在Reflector中打开了程序集,发现它正在捕获(409)冲突HTTP错误并吞下异常。这似乎是SDK或服务器端REST实现的问题。即使容器不存在且容器创建成功,仍然会从服务器返回409。
最好的办法是调用CreateIfNotExists()
并暂时忽略返回值。
此外,在致电GetPermissions()
之前无需致电SetPermissions()
。
答案 0 :(得分:4)
这对我有用(我在app启动时运行):
var blobContainer = GetPhotoBlobContainer();
blobContainer.CreateIfNotExists();
var perm = new BlobContainerPermissions();
perm.PublicAccess = BlobContainerPublicAccessType.Blob;
blobContainer.SetPermissions(perm);
答案 1 :(得分:0)
您可以通过CloudBlobContainer.GetPermissions
检索容器权限,也可以创建新的容器权限,然后设置BlobContainerPermissions.PublicAccess
属性。
BlobContainerPermissions perms = pdfContainer.GetPermissions(); // get existing permissions
perms.PublicAccess = BlobContainerPublicAccessType.Blob; // blob public access
pdfContainer.SetPermissions(perms);
// or create new permissions
BlobContainerPermissions perms = new BlobContainerPermissions();
perms.PublicAccess = BlobContainerPublicAccessType.Blob; // blob public access
pdfContainer.SetPermissions(perms);