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

问题描述

要列出 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,$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,$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 。 “?快照=”。 $快照;

提前致谢。

解决方法

我相信您在 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 团队注意。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...