• Модуль: clouds
  • Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_google.php
  • Класс: CCloudStorageService_GoogleStorage
  • Вызов: CCloudStorageService_GoogleStorage::CompleteMultipartUpload
function CompleteMultipartUpload($arBucket, &$NS)
{
	if (isset($NS["Parts"]))
	{
		// https://cloud.google.com/storage/docs/xml-api/put-object-compose
		$filePath = '/'.trim($NS["filePath"], '/');
		if($arBucket["PREFIX"])
		{
			if(mb_substr($filePath, 0, mb_strlen($arBucket["PREFIX"]) + 2) != "/".$arBucket["PREFIX"]."/")
				$filePath = "/".$arBucket["PREFIX"].$filePath;
		}
		$filePathU = CCloudUtil::URLEncode($filePath, "UTF-8", true);

		$xml = "";
		foreach ($NS["Parts"] as $i => $part)
		{
			$xml .= "".ltrim($part["filePath"], '/')."";
		}
		$xml .= "";

		$response = $this->SendRequest(
			$arBucket["SETTINGS"]["ACCESS_KEY"],
			$arBucket["SETTINGS"]["SECRET_KEY"],
			'PUT',
			$arBucket["BUCKET"],
			$filePathU.'?compose',
			'',
			$xml,
			array(
				"x-goog-acl"=>"public-read",
				"Content-Type"=>$NS["ContentType"],
			)
		);

		if ($this->status == 200)
		{
			foreach ($NS["Parts"] as $i => $part)
			{
				$this->DeleteFile($arBucket, $part["filePath"]);
			}
			return true;
		}
		else
		{
			if (defined("BX_CLOUDS_ERROR_DEBUG"))
			{
				AddMessage2Log($this);
			}
			return false;
		}
	}
	return true;
}