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