← Назад к заметкам

Заметки

Как получить ID папки или файла Диска

Как не перепутать storage ID, object ID, folder ID, disk file ID и внутренний FILE_ID при работе с Диском.

Для методов Диска нужен не любой файловый ID, а ID объекта Диска. Хранилище, папка, файл, прикреплённый объект и физический FILE_ID — разные уровни.

Задача

В Диске есть несколько разных ID. Из-за этого легко передать в метод ID хранилища вместо ID папки или ID прикрепления вместо ID файла.

Уровни ID

storage ID — это хранилище. object ID — объект Диска: файл или папка. FILE_ID — внутренняя файловая запись, которая лежит ниже объекта Диска.

Для методов disk.folder.* обычно нужен ID папки как объекта Диска. Для disk.file.* — ID файла как объекта Диска.

Получение через REST

Если папка находится в корне хранилища, начните с дочерних элементов хранилища. Если внутри другой папки — используйте дочерние элементы папки.

BX24.callMethod(
    'disk.storage.getchildren',
    { id: 3 },
    function (result) {
        console.log(result.data());
    }
);
BX24.callMethod(
    'disk.folder.getchildren',
    { id: 9043 },
    function (result) {
        console.log(result.data());
    }
);

Получение в коробке

В коробке можно получить хранилище пользователя или общее хранилище и искать объект внутри него.

use Bitrix\Main\Loader;
use Bitrix\Disk\Driver;
use Bitrix\Disk\Internals\FolderTable;

const USER_ID = 1;

Loader::includeModule('disk');

$storage = Driver::getInstance()->getStorageByUserId(USER_ID);
$root = $storage ? $storage->getRootObject() : null;

$folder = $root ? $root->getChild([
    '=NAME' => 'Документы сделки',
    'TYPE' => FolderTable::TYPE_FOLDER,
]) : null;

if ($folder) {
    echo $folder->getId();
}

Если нужно скачать физический файл, у объекта файла Диска отдельно получите внутренний FILE_ID.