• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/ui/uploader/storage.php
  • Класс: BitrixMainUIUploaderStorage
  • Вызов: Storage::copyChunk
public function copyChunk($path, array $chunk)
{
	$result = new Result();
	if (is_null(self::$descriptor) || self::$lastId != $path)
	{
		self::flush();
		self::$descriptor = $fdst = fopen($path, 'cb');
		@chmod($path, BX_FILE_PERMISSIONS);
	}
	else
		$fdst = self::$descriptor;

	if (!$fdst)
	{
		$result->addError(new Error(Loc::getMessage("BXU_TemporaryFileIsNotCreated"), "BXU349.1"));
	}
	else if (!flock($fdst, LOCK_EX))
	{
		$result->addError(new Error(Loc::getMessage("BXU_FileIsLocked"), "BXU349.100"));
	}
	else
	{
		$buff = 4096;
		if (($fsrc = fopen($chunk['tmp_name'], 'r')))
		{
			fseek($fdst, $chunk["start"], SEEK_SET);
			while(!feof($fsrc) && ($data = fread($fsrc, $buff)))
			{
				if ($data !== '')
				{
					fwrite($fdst, $data);
				}
				else
				{
					$result->addError(new Error(Loc::getMessage("BXU_FilePartCanNotBeRead"), "BXU349.2"));
					break;
				}
			}
			fclose($fsrc);
			unlink($chunk['tmp_name']);
		}
		else
		{
			$result->addError(new Error(Loc::getMessage("BXU_FilePartCanNotBeOpened"), "BXU349.3"));
		}
	}
	if (!$result->isSuccess())
	{
		self::flush();
	}

	$result->setData(array(
		"size" => $chunk["~size"],
		"tmp_name" => $path,
		"type" => $chunk["type"]
	));

	return $result;
}