- Модуль: ui
- Путь к файлу: ~/bitrix/modules/ui/lib/FileUploader/TempFile.php
- Класс: BitrixUIFileUploaderTempFile
- Вызов: TempFile::appendToCloud
private function appendToCloud(Chunk $chunk): Result
{
$result = new Result();
$bucket = $this->getBucket();
if (!$bucket)
{
return $result->addError(new UploaderError(UploaderError::CLOUD_EMPTY_BUCKET));
}
$minUploadSize = $bucket->getService()->getMinUploadPartSize();
if ($chunk->getSize() < $minUploadSize && !$chunk->isLast())
{
$postMaxSize = CUtil::unformat(ini_get('post_max_size'));
$uploadMaxFileSize = CUtil::unformat(ini_get('upload_max_filesize'));
return $result->addError(
new UploaderError(
UploaderError::CLOUD_INVALID_CHUNK_SIZE,
[
'chunkSize' => $chunk->getSize(),
'minUploadSize' => $minUploadSize,
'postMaxSize' => $postMaxSize,
'uploadMaxFileSize' => $uploadMaxFileSize,
]
)
);
}
$cloudUpload = new CCloudStorageUpload($this->getPath());
if (!$cloudUpload->isStarted() && !$cloudUpload->start($bucket->ID, $chunk->getFileSize(), $chunk->getType()))
{
return $result->addError(new UploaderError(UploaderError::CLOUD_START_UPLOAD_FAILED));
}
if ($cloudUpload->getPos() === doubleval($chunk->getEndRange() + 1))
{
// We already have this part of the file.
if ($chunk->isLast() && !$cloudUpload->finish())
{
return $result->addError(new UploaderError(UploaderError::CLOUD_FINISH_UPLOAD_FAILED));
}
return $result;
}
$fileContent = $chunk->getFile()->isExists() ? $chunk->getFile()->getContents() : false;
if ($fileContent === false)
{
return $result->addError(new UploaderError(UploaderError::CLOUD_GET_CONTENTS_FAILED));
}
$fails = 0;
$success = false;
while ($cloudUpload->hasRetries())
{
if ($cloudUpload->next($fileContent))
{
$success = true;
break;
}
$fails++;
}
if (!$success)
{
// TODO: CCloudStorageUpload::CleanUp
return $result->addError(new UploaderError(UploaderError::CLOUD_UPLOAD_FAILED, ['fails' => $fails]));
}
if ($chunk->isLast() && !$cloudUpload->finish())
{
// TODO: CCloudStorageUpload::CleanUp
return $result->addError(new UploaderError(UploaderError::CLOUD_FINISH_UPLOAD_FAILED));
}
return $result;
}