• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/ui/uploader/file.php
  • Класс: BitrixMainUIUploaderFile
  • Вызов: File::checkFile
static function checkFile(&$file, File $f, $params)
{
	$result = new Result();
	if ($file["error"] > 0)
		$result->addError(new Error(File::getUploadErrorMessage($file["error"]), "BXU347.2.9".$file["error"]));
	else if (array_key_exists("tmp_url", $file))
	{
		$url = new Uri($file["tmp_url"]);
		if ($url->getHost() == '' && ($tmp = CFile::MakeFileArray($url->getPath())) && is_array($tmp))
		{
			$file = array_merge($tmp, $file);
		}
		else if ($url->getHost() <> '' &&
			self::http()->query("HEAD", $file["tmp_url"]) &&
			self::http()->getStatus() == "200")
		{
			$file = array_merge($file, array(
				"size" => self::http()->getHeaders()->get("content-length"),
				"type" => self::http()->getHeaders()->get("content-type")
			));
		}
		else
		{
			$result->addError(new Error(Loc::getMessage("BXU_FileIsNotUploaded"), "BXU347.2"));
		}
	}
	else if (isset($file['bucketId']) && !CloudStorage::checkBucket($file['bucketId']))
	{
		$result->addError(new Error(Loc::getMessage("BXU_FileIsNotUploaded"), "BXU347.2.8"));
	}
	else if (!isset($file['bucketId']) && (!file_exists($file['tmp_name']) || (
			(mb_substr($file["tmp_name"], 0, mb_strlen($params["path"])) !== $params["path"]) &&
			!is_uploaded_file($file['tmp_name'])
		))
	)
	{
		$result->addError(new Error(Loc::getMessage("BXU_FileIsNotUploaded"), "BXU347.2.7"));
	}

	if ($result->isSuccess())
	{
		$params["uploadMaxFilesize"] = $params["uploadMaxFilesize"] ?? 0;
		$params["allowUploadExt"] = $params["allowUploadExt"] ?? false;
		$params["allowUpload"] = $params["allowUpload"] ?? null; // 'I' - image, 'F' - files with ext in $params["allowUploadExt"]

		if ($params["uploadMaxFilesize"] > 0 && $f->getSize() > $params["uploadMaxFilesize"])
		{
			$error = GetMessage("FILE_BAD_SIZE")." (".CFile::FormatSize($f->getSize()).").";
		}
		else
		{
			$name = $f->getName();
			$ff = array_merge($file, array("name" => $name));
			if ($params["allowUpload"] === "I")
			{
				$error = CFile::CheckFile($ff, $params["uploadMaxFilesize"], "image/", CFile::GetImageExtensions());
			}
			elseif ($params["allowUpload"] === "F" && $params["allowUploadExt"])
			{
				$error = CFile::CheckFile($ff, $params["uploadMaxFilesize"], false, $params["allowUploadExt"]);
			}
			else
			{
				$error = CFile::CheckFile($ff, $params["uploadMaxFilesize"]);
			}
		}

		if ($error !== "")
			$result->addError(new Error($error, "BXU347.3"));
	}
	if (preg_match("/^(.+?)\.ch(\d+)\.(\d+)\.chs(\d+)$/", $file["code"], $matches))
	{
		$file["code"] = $matches[1];
		$file["number"] = $matches[2];
		$file["start"] = $matches[3];
		$file["count"] = $matches[4];
		$file["chunkId"] = self::getChunkKey($file["count"], $file["number"]);
	}
	$file["~size"] = $f->getSize();
	$file["~name"] = $f->getName();
	$file["~type"] = $f->getType();

	return $result;
}