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