分隔符在Azure Blob存储中如何工作?

分隔符在Azure Blob存储中如何工作?,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,我使用以下命名约定将图像文件作为BLOB存储在Azure存储中: directory/image-name 在服务器上使用Javascript中的BlobService.listBlobs(容器、选项、回调)尝试检索blob时,我使用: var options = { "prefix":directory } 正如我所料,它只返回以目录名开头的blob,但我想我也可以使用: var options = { "delimiter":"/", "prefix":directory } 然后返回

我使用以下命名约定将图像文件作为BLOB存储在Azure存储中:

directory/image-name
在服务器上使用Javascript中的
BlobService.listBlobs(容器、选项、回调)
尝试检索blob时,我使用:

var options = { "prefix":directory }
正如我所料,它只返回以目录名开头的blob,但我想我也可以使用:

var options = { "delimiter":"/", "prefix":directory }

然后返回相同的blob,可能名称中没有前缀。相反,我什么也没得到。使用分隔符的正确方法是什么?如果只使用前缀就可以获得所需的项目,那么使用它有什么意义呢?

我没有使用JavaScript中的REST API,但我认为您缺少的是目录名后面的斜杠,因此我建议:

var options = { "delimiter":"/", "prefix":directory+"/" }
Windows Azure存储实际上没有目录,在底层实现中,容器中的所有blob都只是平面列表,blob名称(不是容器名称)可能包含斜杠。分隔符是调用ListBlobs REST API时的一个选项,该API允许您模拟类似目录的行为。如果启用了delimiter选项,并且blob名称中超过前缀的部分包含分隔符,则回复将忽略该blob

为了举例说明,让我们命名一些blob,假设它们都在同一个容器中:

因此,如果使用前缀“a/”在该容器上调用ListBlob,而不指定分隔符,它将返回前三个名称,因为它们都有前缀“a/”


相反,如果使用相同的“a/”前缀调用ListBlob并将分隔符设置为“/”,则只会得到中间的两个名称;服务会忽略a/b/extra.txt,因为它位于(模拟的)子目录“b”中“

我对您使用node.js的理解正确吗?这正好帮了我一天的忙。当您的blob格式为:guidA\guidB\guidC。。。
a/b/extra.txt
a/bloba.txt
a/blobb.txt
other.txt