• Модуль: documentgenerator
  • Путь к файлу: ~/bitrix/modules/documentgenerator/lib/storage/file.php
  • Класс: BitrixDocumentGeneratorStorageFile
  • Вызов: File::saveToCloud
protected function saveToCloud($content, $fileName, CCloudStorageBucket $bucket, array $options = [])
{
	$fileSize = BinaryString::getLength($content);
	$fileName = CCloudTempFile::GetFileName($bucket, $fileName);
	$result = new AddResult();
	if(Loader::includeModule('clouds'))
	{
		if(!$bucket->init())
		{
			$result->addError(new Error('Could not init bucket'));
			return $result;
		}
		$isStarted = true;
		$upload = new CCloudStorageUpload($fileName);

		if(!$upload->isStarted())
		{
			/** @noinspection PhpParamsInspection */
			$isStarted = $upload->start($bucket, $fileSize);
		}

		if(!$isStarted)
		{
			$result->addError(new Error('Could not start upload'));
		}

		$currentPos = 0;
		$partSize = $bucket->getService()->GetMinUploadPartSize();
		do
		{
			$data = BinaryString::getSubstring($content, $currentPos, $partSize);
			$currentPos += $partSize;
			$success = false;
			while($upload->hasRetries())
			{
				if($upload->Next($data, $bucket))
				{
					$success = true;
					break;
				}
			}

			if(!$success)
			{
				$result->addError(new Error('Could not upload part'));
				return $result;
			}
			$fileSize -= $partSize;
		}
		while($fileSize > 0);

		if(!$upload->finish())
		{
			$result->addError(new Error('Could not finish upload'));
			return $result;
		}
		$result->setId($bucket->GetFileSRC($fileName));
	}
	else
	{
		$result->addError(new Error('Module clouds is not installed'));
	}
	return $result;
}