...Человеческий поиск в разработке...
- Модуль: ui
- Путь к файлу: ~/bitrix/modules/ui/lib/FileUploader/Uploader.php
- Класс: BitrixUIFileUploaderUploader
- Вызов: Uploader::upload
public function upload(Chunk $chunk, string $token = null): UploadResult { $controller = $this->getController(); $uploadResult = new UploadResult(); if ($chunk->isFirst()) { // Common file validation (uses in CFile::SaveFile) $commitOptions = $controller->getCommitOptions(); $error = CFile::checkFile( [ 'name' => $chunk->getName(), 'size' => $chunk->getFileSize(), 'type' => $chunk->getType() ], 0, false, false, $commitOptions->isForceRandom(), $commitOptions->isSkipExtension() ); if ($error !== '') { return $this->handleUploadError( $uploadResult->addError(new UploaderError('CHECK_FILE_FAILED', $error)), $controller ); } // Controller Validation $validationResult = $chunk->validate($controller->getConfiguration()); if (!$validationResult->isSuccess()) { return $this->handleUploadError($uploadResult->addErrors($validationResult->getErrors()), $controller); } ['width' => $width, 'height' => $height] = $validationResult->getData(); $chunk->setWidth((int)$width); $chunk->setHeight((int)$height); $uploadRequest = new UploadRequest($chunk->getName(), $chunk->getType(), $chunk->getSize()); $uploadRequest->setWidth($chunk->getWidth()); $uploadRequest->setHeight($chunk->getHeight()); // Temporary call for compatibility // $canUploadResult = $controller->canUpload($uploadRequest); $canUploadResult = call_user_func([$controller, 'canUpload'], $uploadRequest); if (($canUploadResult instanceof CanUploadResult) && !$canUploadResult->isSuccess()) { return $this->handleUploadError($uploadResult->addErrors($canUploadResult->getErrors()), $controller); } else if (!is_bool($canUploadResult) || $canUploadResult === false) { return $this->handleUploadError( $uploadResult->addError(new UploaderError(UploaderError::FILE_UPLOAD_ACCESS_DENIED)), $controller ); } $createResult = TempFile::create($chunk, $controller); if (!$createResult->isSuccess()) { return $this->handleUploadError($uploadResult->addErrors($createResult->getErrors()), $controller); } /** @var TempFile $tempFile */ $tempFile = $createResult->getData()['tempFile']; $uploadResult->setTempFile($tempFile); $uploadResult->setToken($this->generateToken($tempFile)); $controller->onUploadStart($uploadResult); if (!$uploadResult->isSuccess()) { return $this->handleUploadError($uploadResult, $controller); } } else { if (empty($token)) { return $this->handleUploadError( $uploadResult->addError(new UploaderError(UploaderError::EMPTY_TOKEN)), $controller ); } $guid = $this->getGuidFromToken($token); if (!$guid) { return $this->handleUploadError( $uploadResult->addError(new UploaderError(UploaderError::INVALID_SIGNATURE)), $controller ); } $tempFile = TempFileTable::getList([ 'filter' => [ '=GUID' => $guid, '=UPLOADED' => false, ], ])->fetchObject(); if (!$tempFile) { return $this->handleUploadError( $uploadResult->addError(new UploaderError(UploaderError::UNKNOWN_TOKEN)), $controller ); } $uploadResult->setTempFile($tempFile); $uploadResult->setToken($token); $appendResult = $tempFile->append($chunk); if (!$appendResult->isSuccess()) { return $this->handleUploadError($uploadResult->addErrors($appendResult->getErrors()), $controller); } } if ($uploadResult->isSuccess() && $chunk->isLast()) { $commitResult = $tempFile->commit($controller->getCommitOptions()); if (!$commitResult->isSuccess()) { return $this->handleUploadError($uploadResult->addErrors($commitResult->getErrors()), $controller); } $fileInfo = $this->createFileInfo($uploadResult->getToken()); $uploadResult->setFileInfo($fileInfo); $uploadResult->setDone(true); $controller->onUploadComplete($uploadResult); if (!$uploadResult->isSuccess()) { return $this->handleUploadError($uploadResult, $controller); } } return $uploadResult; }