- Модуль: clouds
- Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_google.php
- Класс: CCloudStorageService_GoogleStorage
- Вызов: CCloudStorageService_GoogleStorage::UploadPartNo
function UploadPartNo($arBucket, &$NS, $data, $part_no)
{
global $APPLICATION;
$part_no = intval($part_no);
$found = false;
if (isset($NS["Parts"]))
{
foreach ($NS["Parts"] as $first_part_no => $part)
{
if ($part["part_no"] === ($part_no - 1))
{
$found = $first_part_no;
break;
}
}
}
else
{
$NS["Parts"] = array();
}
if ($found === false)
{
$partFileName = '/'.trim($NS["filePath"], '/').".tmp".$part_no;
if($arBucket["PREFIX"])
{
if(mb_substr($partFileName, 0, mb_strlen($arBucket["PREFIX"]) + 2) != "/".$arBucket["PREFIX"]."/")
$partFileName = "/".$arBucket["PREFIX"].$partFileName;
}
$upload_info = $this->StartUpload($arBucket, $partFileName, $NS["ContentType"]);
if ($upload_info)
{
$upload_info["fileSize"] = "*";
$upload_info["part_no"] = $part_no;
$found = $part_no;
$NS["Parts"][$part_no] = $upload_info;
ksort($NS["Parts"]);
}
else
{
return false;
}
}
$NS["Parts"][$found]["part_no"] = $part_no;
if (
(isset($NS["Parts"][$part_no + 1]))
|| (($NS["Parts"][$found]["part_no"] * $this->GetMinUploadPartSize() + $this->GetMinUploadPartSize()) >= $NS["fileSize"])
)
{
$data_len = strlen($data);
$NS["Parts"][$found]["fileSize"] = $NS["Parts"][$found]["filePos"] + $data_len;
}
$filePath = $NS["Parts"][$found]["filePath"];
$filePathU = CCloudUtil::URLEncode($filePath, "UTF-8", true);
$this->UploadRange($filePathU, $arBucket, $NS["Parts"][$found], $data, $NS["Parts"][$found]["filePos"]);
if(
$this->status == 308
&& is_array($this->headers)
&& preg_match("/^bytes=(\d+)-(\d+)$/", $this->headers["Range"], $match)
)
{
$APPLICATION->ResetException();
$NS["Parts"][$found]["filePos"] = $match[2]+1;
return true;
}
elseif($this->status == 200)
{
return true;
}
else
{
if (defined("BX_CLOUDS_ERROR_DEBUG"))
{
AddMessage2Log($this);
}
return false;
}
}