为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 container.listBlobs() 和 blob.exists() 生成单个帐户

如何为 container.listBlobs() 和 blob.exists() 生成单个帐户

墨色风雨 2023-05-24 16:13:46
我正在开发一个 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 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

是的,只需在 blob 和容器资源上添加正确的权限。请注意,列表不同于创建。

你可以在这里找到它

//img1.sycdn.imooc.com//646dc7550001126d03390196.jpg

然后添加权限

//img1.sycdn.imooc.com//646dc75f0001e14e06250615.jpg


查看完整回答
反对 回复 2023-05-24
?
holdtom

TA贡献1805条经验 获得超10个赞

设置两种资源类型解决了这个问题:

sasAccountPolicy.setResourceTypes(EnumSet.of(SharedAccessAccountResourceType.OBJECT, SharedAccessAccountResourceType.CONTAINER));

(我正在开发的应用程序还必须生成 SAS URI。)

谢谢。


查看完整回答
反对 回复 2023-05-24
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

对于listing blobsblob 容器,您需要设置resource typeContainer. 您需要的许可是List.

对于checking if blob exists,您需要设置resource typeObject。您需要的许可是Read.

对于deleting blob,您需要将权限设置为Delete。资源类型仍为Object.

由于您只使用 Blob 存储,因此service type将只是Blob.

总结一下:

  • 服务类型:Blob

  • 资源类型:容器(用于列出 blob)和对象(用于检查 blob 的存在和删除 blob)

  • 权限:列出、读取和删除

有了这个,你应该能够实现你的目标。


查看完整回答
反对 回复 2023-05-24
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信