我正在开发一个 Java 应用程序,它使用 Account SAS(共享访问签名)URI 执行以下方法:CLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();container.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()但是,我找不到生成单个帐户 SAS 来支持上面列出的所有方法的方法。使用 SharedAccessAccountResourceType.OBJECT 生成的帐户 SAS:执行成功:CLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();失败并显示错误代码:AuthorizationResourceTypeMismatchcontainer.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()使用 SharedAccessAccountResourceType.CONTAINER 生成的帐户 SAS:执行成功:container.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()失败并显示错误代码:AuthorizationResourceTypeMismatchCLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();使用 SharedAccessAccountResourceType.SERVICE 生成的帐户 SAS 失败并显示错误代码:上述所有方法的 AuthorizationResourceTypeMismatch。有什么方法可以生成适用于以下所有方法的单个帐户 SAS?CLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();container.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()
3 回答
holdtom
TA贡献1805条经验 获得超10个赞
设置两种资源类型解决了这个问题:
sasAccountPolicy.setResourceTypes(EnumSet.of(SharedAccessAccountResourceType.OBJECT, SharedAccessAccountResourceType.CONTAINER));
(我正在开发的应用程序还必须生成 SAS URI。)
谢谢。
慕妹3242003
TA贡献1824条经验 获得超6个赞
对于listing blobs
blob 容器,您需要设置resource type
为Container
. 您需要的许可是List
.
对于checking if blob exists
,您需要设置resource type
为Object
。您需要的许可是Read
.
对于deleting blob
,您需要将权限设置为Delete
。资源类型仍为Object
.
由于您只使用 Blob 存储,因此service type
将只是Blob
.
总结一下:
服务类型:Blob
资源类型:容器(用于列出 blob)和对象(用于检查 blob 的存在和删除 blob)
权限:列出、读取和删除
有了这个,你应该能够实现你的目标。
添加回答
举报
0/150
提交
取消