- Модуль: clouds
- Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_google.php
- Класс: CCloudStorageService_GoogleStorage
- Вызов: CCloudStorageService_GoogleStorage::ListFiles
function ListFiles($arBucket, $filePath, $bRecursive = false)
{
global $APPLICATION;
$result = array(
"dir" => array(),
"file" => array(),
"file_size" => array(),
"file_mtime" => array(),
"file_hash" => array(),
"last_key" => "",
);
$filePath = trim($filePath, '/');
if($filePath <> '')
{
$filePath .= '/';
}
if($arBucket["PREFIX"])
{
if(mb_substr($filePath, 0, mb_strlen($arBucket["PREFIX"]) + 2) != "/".$arBucket["PREFIX"]."/")
$filePath = $arBucket["PREFIX"]."/".ltrim($filePath, "/");
}
$filePath = $APPLICATION->ConvertCharset($filePath, LANG_CHARSET, "UTF-8");
$filePath = str_replace(" ", "+", $filePath);
$marker = '';
while(true)
{
$response = $this->SendRequest(
$arBucket["SETTINGS"]["ACCESS_KEY"],
$arBucket["SETTINGS"]["SECRET_KEY"],
'GET',
$arBucket["BUCKET"],
'/',
'?'.($bRecursive? '': 'delimiter=/&').'prefix='.rawurlencode($filePath).'&marker='.rawurlencode($marker)
);
if(
$this->status == 200
&& is_array($response)
&& isset($response["ListBucketResult"])
&& is_array($response["ListBucketResult"])
&& isset($response["ListBucketResult"]["#"])
&& is_array($response["ListBucketResult"]["#"])
)
{
if(
isset($response["ListBucketResult"]["#"]["CommonPrefixes"])
&& is_array($response["ListBucketResult"]["#"]["CommonPrefixes"])
)
{
foreach($response["ListBucketResult"]["#"]["CommonPrefixes"] as $a)
{
$dir_name = mb_substr(rtrim($a["#"]["Prefix"][0]["#"], "/"), mb_strlen($filePath));
$result["dir"][] = $APPLICATION->ConvertCharset($dir_name, "UTF-8", LANG_CHARSET);
}
}
if(
isset($response["ListBucketResult"]["#"]["Contents"])
&& is_array($response["ListBucketResult"]["#"]["Contents"])
)
{
foreach($response["ListBucketResult"]["#"]["Contents"] as $a)
{
$file_name = mb_substr($a["#"]["Key"][0]["#"], mb_strlen($filePath));
$result["file"][] = $APPLICATION->ConvertCharset($file_name, "UTF-8", LANG_CHARSET);
$result["file_size"][] = $a["#"]["Size"][0]["#"];
$result["file_mtime"][] = mb_substr($a["#"]["LastModified"][0]["#"], 0, 19);
$result["file_hash"][] = trim($a["#"]["ETag"][0]["#"], '"');
$result["last_key"] = $file_name;
}
}
if(
isset($response["ListBucketResult"]["#"]["IsTruncated"])
&& is_array($response["ListBucketResult"]["#"]["IsTruncated"])
&& $response["ListBucketResult"]["#"]["IsTruncated"][0]["#"] === "true"
&& $response["ListBucketResult"]["#"]["NextMarker"][0]["#"] <> ''
)
{
$marker = $response["ListBucketResult"]["#"]["NextMarker"][0]["#"];
continue;
}
else
{
break;
}
}
else
{
if (defined("BX_CLOUDS_ERROR_DEBUG"))
{
AddMessage2Log($this);
}
$APPLICATION->ResetException();
return false;
}
}
return $result;
}