• Модуль: 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;
	}
}