Диск
\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’);