使用 php 从文件共享快照中列出 Azure 文件和文件夹

时间:2021-05-06 15:20:37

标签: php azure azure-storage fileshare storage-file-share

要列出 Azure Files 中的文件和文件夹,可以使用以下代码完成:

function ListFolder($shareName, $path)
{
    global $fileRestProxy;
    $vMaxResultados = 5000;
    $vNextMarker = "";
    $listResult = null;
    try
    {
        do
        {
            $options = new ListDirectoriesAndFilesOptions();
            $options->setMaxResults($vMaxResultados);
            $options->setMarker($vNextMarker);
            $listResult = $fileRestProxy->ListDirectoriesAndFiles($shareName,$path,$options);
            $vNextMarker = $listResult->getNextMarker();
        } while ($vNextMarker != "");
    }
    catch (Exception $e)
    {
        $code = $e->getCode();
        $error_message = $e->getMessage();
        return "ERROR:$code:$error_message";
    }
    return $listResult;
}

但是如何与这些共享中的快照相同的语法或方法?

这不起作用:

function ListSnapshotFolder($shareName, $path, $snapshot)
{
    global $fileRestProxy;
    $vMaxResultados = 5000;
    $vNextMarker = "";
    $listResult = null;
    try
    {
        do
        {
            $options = new ListDirectoriesAndFilesOptions();
            $options->setMaxResults($vMaxResultados);
            $options->setMarker($vNextMarker);
            $shareFull = $shareName . "?snapshot=" . $snapshot; 
            $listResult = $fileRestProxy->ListDirectoriesAndFiles($shareFull,$path,$options);
            $vNextMarker = $listResult->getNextMarker();
        } while ($vNextMarker != "");
    }
    catch (Exception $e)
    {
        $code = $e->getCode();
        $error_message = $e->getMessage();
        return "ERROR:$code:$error_message";
    }
    return $listResult;
}

$option 对象中是否有要添加的参数? 或者也许 $shareFull 必须以某种格式创建? $shareFull = $shareName 。 “?快照=”。 $快照;

提前致谢。

1 个答案:

答案 0 :(得分:1)

我相信您在 SDK 中发现了一个错误。我查了源代码 here 并没有规定在选项中提供 sharesnapshot 查询字符串参数,而且代码甚至没有处理它。

    public function listDirectoriesAndFilesAsync(
        $share,
        $path = '',
        ListDirectoriesAndFilesOptions $options = null
    ) {
        Validate::notNull($share, 'share');
        Validate::canCastAsString($share, 'share');
        Validate::canCastAsString($path, 'path');

        $method      = Resources::HTTP_GET;
        $headers     = array();
        $postParams  = array();
        $queryParams = array();
        $path        = $this->createPath($share, $path);

        if (is_null($options)) {
            $options = new ListDirectoriesAndFilesOptions();
        }

        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_REST_TYPE,
            'directory'
        );
        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_COMP,
            'list'
        );
        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_PREFIX_LOWERCASE,
            $options->getPrefix()
        );
        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_MARKER_LOWERCASE,
            $options->getNextMarker()
        );
        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_MAX_RESULTS_LOWERCASE,
            $options->getMaxResults()
        );

        $this->addOptionalQueryParam(
            $queryParams,
            Resources::QP_TIMEOUT,
            $options->getTimeout()
        );

        $dataSerializer = $this->dataSerializer;

        return $this->sendAsync(
            $method,
            $headers,
            $queryParams,
            $postParams,
            $path,
            Resources::STATUS_OK,
            Resources::EMPTY_STRING,
            $options
        )->then(function ($response) use ($dataSerializer) {
            $parsed = $dataSerializer->unserialize($response->getBody());
            return ListDirectoriesAndFilesResult::create(
                $parsed,
                Utilities::getLocationFromHeaders($response->getHeaders())
            );
        }, null);
    }

您可能想在此处提出问题:https://github.com/Azure/azure-storage-php/issues 并提请 SDK 团队注意。

相关问题