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