Документация для разработчиков
Темная тема

Диск

\Bitrix\Disk - пространство имен модуля Диск.

Перед использованием модуля необходимо проверить установлен ли он, и подключить его при помощи конструкции:

\Bitrix\Main\Loader::includeModule('disk');

Примеры

Получить хранилище

<?php 
if (\Bitrix\Main\Loader::includeModule('disk')) 
{ 
    $driver = \Bitrix\Disk\Driver::getInstance(); 
    $storage = $driver->getStorageByUserId(1);//пользователя 
    $storage = $driver->getStorageByGroupId(33);//группы 
    $storage = $driver->getStorageByCommonId('shared_files_s1');//идентификатор 
    $storage = \Bitrix\Disk\Storage::loadById(66);//знаем идентификатор хранилища 
    if ($storage) 
    { 
        //можем работать с хранилищем 
    } 
} 

Создать папку в хранилище

<?php 
if (\Bitrix\Main\Loader::includeModule('disk')) 
{ 
    $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
    if ($storage) 
    { 
        $folder = $storage->addFolder( 
            array( 
                'NAME' => 'New folder', 
                'CREATED_BY' => 1 
            ) 
        ); 
    } 
}

Поиск подпапки и работа с ней. (Доступно с версии 17.0.2 модуля Диск)

<?php 
if (\Bitrix\Main\Loader::includeModule('disk')) 
{ 
    $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
    if ($storage) 
    { 
        /* 
        как-то получаем папку 
        */ 
        $folder = $folder->getChild( 
            array( 
                '=NAME' => 'New folder',  
                'TYPE' => \Bitrix\Disk\Internals\FolderTable::TYPE_FOLDER 
            ) 
        ); 
    } 
}

Поиск корневой папки. (Доступно с версии 17.0.2 модуля Диск)

<?php 
if (\Bitrix\Main\Loader::includeModule('disk')) 
{ 
    $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
    if ($storage) 
    { 
        $folder = $storage->getRootObject(); 
        $folder = $folder->getChild( 
            array( 
                '=NAME' => 'New folder',  
                'TYPE' => \Bitrix\Disk\Internals\FolderTable::TYPE_FOLDER 
            ) 
        ); 
    } 
} 

Создание подпапки в папке

<?php 
if (\Bitrix\Main\Loader::includeModule('disk'))  { 
    $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
    if ($storage)  { 
        $folder = $storage->getRootObject();  
        $folder = $folder->getChild( 
            array( 
                '=NAME' => 'New folder',  
                'TYPE' => \Bitrix\Disk\Internals\FolderTable::TYPE_FOLDER 
            ) 
        ); 
        if ($folder) { 
            $folder->addSubFolder(    array( 
                'NAME' => 'New folder 2', 
                'CREATED_BY' => 1 
            )); 
        } 
    } 
}

Задание прав на папку

<?php 
        if ($folder) 
        { 
            $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager(); 
            $accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_READ);//чтение 
            //$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_EDIT);//изменение 
            //$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_ADD);//добавление 
            //$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_FULL);//полные права 
             
            $newFolder = $folder->addSubFolder( 
                array( 'NAME' => 'New folder',  'CREATED_BY' => 1), 
                array( 
                    array( 
                        'ACCESS_CODE' => 'U10', // для пользователя с ID=10 выдадутся выбранные права
                        'TASK_ID' => $accessTaskId, 
                    ), 
                ) 
            ); 
        } 

Отключение прав на папку. (Доступно с версии 17.0.2 модуля Диск.)

<?php 
        if ($folder) 
        { 
            $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager(); 
            $accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_READ);//чтение 
            //$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_EDIT);//изменение 
            //$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_ADD);//добавление 
            //$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_FULL);//полные права 
             
            $newFolder = $folder->addSubFolder( 
                array( 'NAME' => 'New folder',  'CREATED_BY' => 1), 
                array( 
                    array( 
                        ‘NEGATIVE' => true, 
                        'ACCESS_CODE' => 'U10', 
                        'TASK_ID' => $accessTaskId, 
                    ), 
                ) 
            ); 
        }

Загрузить файл в папку.

<?php 
if (\Bitrix\Main\Loader::includeModule('disk')) 
{ 
    $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
    if ($storage) 
    { 
        $folder = $storage->getChild( 
            array( 
                '=NAME' => 'New folder',  
                'TYPE' => \Bitrix\Disk\Internals\FolderTable::TYPE_FOLDER 
            ) 
        ); 
        if ($folder) 
        { 
            $fileArray = \CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'].'/test.jpg'); 
            $file = $folder->uploadFile($fileArray, array( 
                'CREATED_BY' => 1 
            )); 
        } 
    } 
}

Загрузка файла в корневую папку.

if (\Bitrix\Main\Loader::includeModule('disk')) 
{ 
    $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
    if ($storage) 
    { 
        $folder = $storage->getRootObject(); 
        $fileArray = \CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'].'/test.jpg');  
        $file = $folder->uploadFile($fileArray, array(  
            'CREATED_BY' => 1  
        ));  
    } 
}

Высокоуровневая работа с объектом файла.

<?php 
$newFile->markDeleted($deletedBy); 
$newFile->delete($deletedBy);

Поиск файла для работы с ним. Работать с файлом можно только перейдя в папку.

<?php 
if (\Bitrix\Main\Loader::includeModule('disk')) 
{ 
    $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
    if ($storage) 
    { 
        $folder = $storage->getRootObject(); 
        $file = $folder->getChild( 
            array( 
                '=NAME' => 'test.jpg',  
                'TYPE' => \Bitrix\Disk\Internals\FileTable::TYPE_FILE 
            ) 
        ); 
        if ($file) 
        { 
            // 
        } 
    } 
} 

Получение ссылки на файл на портале.

<?php 
if ($file) 
{ 
    $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager(); 
    echo $urlManager->getPathFileDetail($file); 
}

Получение публичной ссылки

<?php 
if ($file) 
{ 
    $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager(); 
    $extLink = $file->addExternalLink( 
        array( 
            'CREATED_BY' => 1, 
            'TYPE' => \Bitrix\Disk\Internals\ExternalLinkTable::TYPE_MANUAL, 
        ) 
    ); 
    $extLinkUrl = $urlManager->getShortUrlExternalLink( 
        array( 
            'hash' => $extLink->getHash(), 
            'action' => 'default', 
        ), 
        true 
    ); 
    echo $extLink->getHash().'<br>'; 
    echo $extLinkUrl; 
}

Получение физического файла

<?php 
if ($file) 
{ 
    //получение айди физического файла 
    echo $file->getFileId(); 
    //работаем с ним 
    CFile::ViewByUser($file->getFileId(), array('force_download' => true)); 
}

Работа с файлами

<?php 
//загрузка новой версии файла 
if ($file) 
{ 
    $fileArray = \CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'].'/test.jpg'); 
    $newVersion = $file->uploadVersion($fileArray, 1);//файл, ID пользователя 
// если при загрузке от одного пользователя двух версий файла с одним именем происходит менее 300 секунд - файлы сливаются.
} 

//перемещение файла в другую папку 
if ($file) 
{ 
    $file->moveTo($folder, $movedBy);//объект папки, пользователь 
}

Получение физического файла (для загрузки, например)

<?php 
if ($file) 
{ 
    //получение айди физического файла 
    echo $file->getFileId(); 
    //работаем с ним 
    CFile::ViewByUser($file->getFileId(), array('force_download' => true)); 
}

Проверка объекта и вывод ошибок

<?php 
if ($folder) 
{ 
    $folder->rename('Reports.backup'); 
} 
else 
{ 
    var_dump($folder->getErrors()); 
}

Работа с модулем допустима только высокоуровневыми методами.

<?php 
//нельзя 
FolderTable::update(); 

//следует 
$folder->rename(‘New folder 2’);


© «Битрикс», 2001-2023, «1С-Битрикс», 2023