• Модуль: clouds
  • Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_s3.php
  • Класс: CCloudStorageService_S3
  • Вызов: CCloudStorageService_S3::InitiateMultipartUpload
function InitiateMultipartUpload($arBucket, &$NS, $filePath, $fileSize, $ContentType)
{
	$filePath = '/'.trim($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);

	$additional_headers = array();
	if($this->_public)
		$additional_headers["x-amz-acl"] = "public-read";
	$additional_headers["Content-Type"] = $ContentType;

	$this->SetLocation($arBucket["LOCATION"]);
	$response = $this->SendRequest(
		$arBucket["SETTINGS"],
		'POST',
		$arBucket["BUCKET"],
		$filePathU,
		'?uploads=',
		'',
		$additional_headers
	);

	if(
		$this->status == 200
		&& is_array($response)
		&& isset($response["InitiateMultipartUploadResult"])
		&& is_array($response["InitiateMultipartUploadResult"])
		&& isset($response["InitiateMultipartUploadResult"]["#"])
		&& is_array($response["InitiateMultipartUploadResult"]["#"])
		&& isset($response["InitiateMultipartUploadResult"]["#"]["UploadId"])
		&& is_array($response["InitiateMultipartUploadResult"]["#"]["UploadId"])
		&& isset($response["InitiateMultipartUploadResult"]["#"]["UploadId"][0])
		&& is_array($response["InitiateMultipartUploadResult"]["#"]["UploadId"][0])
		&& isset($response["InitiateMultipartUploadResult"]["#"]["UploadId"][0]["#"])
		&& is_string($response["InitiateMultipartUploadResult"]["#"]["UploadId"][0]["#"])
	)
	{
		$NS = array(
			"filePath" => $filePath,
			"UploadId" => $response["InitiateMultipartUploadResult"]["#"]["UploadId"][0]["#"],
			"Parts" => array(),
		);
		return true;
	}
	elseif ($this->checkForTokenExpiration($this->status, $this->result))
	{
		$this->tokenHasExpired = true;
		return false;
	}
	else
	{
		if (defined("BX_CLOUDS_ERROR_DEBUG"))
		{
			AddMessage2Log($this);
		}
		return false;
	}
}