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

我正在开发一个 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();

失败并显示错误代码:AuthorizationResourceTypeMismatch


container.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()

失败并显示错误代码:AuthorizationResourceTypeMismatch


CLoudBlockBlob 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()


墨色风雨
浏览 92回答 3
3回答

ITMISS

是的,只需在 blob 和容器资源上添加正确的权限。请注意,列表不同于创建。你可以在这里找到它然后添加权限

holdtom

设置两种资源类型解决了这个问题:sasAccountPolicy.setResourceTypes(EnumSet.of(SharedAccessAccountResourceType.OBJECT, SharedAccessAccountResourceType.CONTAINER));(我正在开发的应用程序还必须生成 SAS URI。)谢谢。

慕妹3242003

对于listing blobsblob 容器,您需要设置resource type为Container. 您需要的许可是List.对于checking if blob exists,您需要设置resource type为Object。您需要的许可是Read.对于deleting blob,您需要将权限设置为Delete。资源类型仍为Object.由于您只使用 Blob 存储,因此service type将只是Blob.总结一下:服务类型:Blob资源类型:容器(用于列出 blob)和对象(用于检查 blob 的存在和删除 blob)权限:列出、读取和删除有了这个,你应该能够实现你的目标。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java