• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/controller/file.php
  • Класс: BitrixDiskControllerFile
  • Вызов: File::createByContentAction
public function createByContentAction(DiskFolder $folder, $filename, DiskBitrix24DiskTmpFile $content, $generateUniqueName = false)
{
	$content->registerDelayedDeleteOnShutdown();
	$currentUserId = $this->getCurrentUser()->getId();
	$securityContext = $folder->getStorage()->getSecurityContext($currentUserId);
	$contentType = $this->request->getHeader('X-Upload-Content-Type')?: $content->getContentType();

	if (!$folder->canAdd($securityContext))
	{
		$this->addError(new Error(Loc::getMessage('DISK_ERROR_MESSAGE_DENIED')));

		return null;
	}

	if ($content->isCloud() && $content->getContentType())
	{
		$fileId = CFile::saveFile([
			'name' => $content->getFilename(),
			'tmp_name' => $content->getAbsolutePath(),
			'type' => $contentType,
			'width' => $content->getWidth(),
			'height' => $content->getHeight(),
			'MODULE_ID' => Driver::INTERNAL_MODULE_ID,
			], Driver::INTERNAL_MODULE_ID, true, true);

		if (!$fileId)
		{
			$this->addError(new Error('Could not save file data by CFile::saveFile'));

			return null;
		}

		//it's crutch to be similar @see BitrixDiskFolder::uploadFile()
		$filename = DiskUiText::correctFilename($filename);
		$file = $folder->addFile(
			[
				'NAME' => $filename,
				'FILE_ID' => $fileId,
				'SIZE' => $content->getSize(),
				'CREATED_BY' => $currentUserId,
			],
			[],
			$generateUniqueName
		);
	}
	else
	{
		$fileArray = CFile::makeFileArray($content->getAbsolutePath());
		$fileArray['type'] = $contentType;
		$fileArray['name'] = $filename;
		$file = $folder->uploadFile(
			$fileArray,
			[
				'NAME' => $filename,
				'CREATED_BY' => $currentUserId,
			],
			[],
			$generateUniqueName
		);
	}

	if (!$file)
	{
		$this->addErrors($folder->getErrors());

		return null;
	}

	$previewFileData = $this->request->getFile('previewFile');
	if (is_array($previewFileData))
	{
		$file->attachImagePreview($previewFileData);
	}

	return $this->getAction($file);
}