获取容器内子目录中的所有blob

时间:2020-10-29 15:57:29

标签: azure azure-storage azure-storage-blobs

所以我在将blob放入容器中时遇到问题-我能够成功抓取容器内的所有blob,但无法在容器中的文件夹内抓取-我将如何成功做到这一点?

问题
我的容器中有一个名为“ big/”的文件夹-我将如何从该文件夹中抓取所有blob,而不是像我在下面所做的那样仅捕获通用容器?

我们将不胜感激!

这是我拥有的getBlobs()方法(查看下面的图像和代码):
enter image description here

/**
 * Get all blobs from container
 *
 * @param int $max
 * @return array
 */
public function getBlobs(int $max = 5000) : array
{
    // Check if a container is set
    if (!$this->containerName) {
        return [];
    }

    try {
        $blobMeta = [];
        $blobOptions = new ListBlobsOptions();

        // Set the max results at 5000 (Default: 5000)
        $blobOptions->setMaxResults($max);

        do {
            // Grab the defined container
            $blob_list = $this->connect()->listBlobs(
                $this->containerName,
                $blobOptions
            );

            var_dump($blob_list);
            die();

            // Loop through all the
            foreach ($blob_list->getBlobs() as $blob) {
                $blobMeta[] = [
                    'name' => $blob->getName(),
                    'url' => $blob->getUrl(),
                ];
            }
            $blobOptions->setContinuationToken($blob_list->getContinuationToken());

        } while ($blob_list->getContinuationToken());

        return $blobMeta;
    } catch (ServiceException $e) {
        $code = $e->getCode();
        $error_message = $e->getMessage();
        echo $code . ": " . $error_message . PHP_EOL;
        return [];
    }
}

1 个答案:

答案 0 :(得分:1)

如果要列出文件夹下的Blob,可以使用ListBlobsOptionssetPrefix("YourFolderName/")来执行此操作。您可以在第here行的listBlobsSample函数中找到详细的代码示例。