Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Диск - api коробка



документация Битрикса https://dev.1c-bitrix.ru/api_d7/bitrix/disk/index.php
CModule::IncludeModule('disk'); //диск
\Bitrix\Main\Loader::includeModule('disk');
Посмотреть данные о диске тут:  
Настройки - Производительность - Таблицы - b_disk_storage
работа с файлом диска
$file = Bitrix\Disk\File::getById($fileId); //получить файл

$name = $file->getName(); // получим имя файла
$info = $file->getFile(); // получим информацию о файле
$link = \Bitrix\Disk\Driver::getInstance()->getUrlManager()->getUrlForShowFile($file); // получим ссылку на файл в Диске

$file->delete($userId); //удалить из-под пользователя 
удалить диск
$userId = 1; //id пользователя, от имени которого будет совершаться удаление
$storageId = 100; //id хранилища Диска, которые вы желаете удалить. См. таблицу b_disk_storage
$errors = null;
$storage = \Bitrix\Disk\Storage::loadById($storageId);
if($storage){
    if(!$storage->delete($userId)){
        $errors = $storage->getErrors();
    }
}
переименовать диск
$storageId = 100; //id хранилища Диска, которые вы желаете переименовать. См. таблицу b_disk_storage
$newName = 'NewName'; //новое имя
$errors = null;

$storage = \Bitrix\Disk\Storage::loadById($storageId);
if($storage){
    if(!$storage->rename($newName)){
        $errors = $storage->getErrors();
    }
}
ограничить размер
Важно!
Должна быть активна настройка «Разрешить квотирование хранилищ»
Настройки > Настройки продукта > Настройки модулей > Диск
$userId = 1; //кому

$storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId($userId);
//установить лимит в 1024*1024 байт
$storage->setSizeLimit(1024*1024);

//отключить лимит 
$storage->setSizeLimit(null);
получить путь
$fileId = 100;

$file = \Bitrix\Disk\File::getById($fileId);
$urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager();

var_dump($urlManager->getPathFileDetail($file));
var_dump($urlManager->getPathInListing($file));
изменение прав на папку диска
CModule::IncludeModule('disk');

$storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1);
$folder = \Bitrix\Disk\Folder::load(array(
   'PARENT_ID' => $storage->getRootObjectId(),
   'NAME' => 'Загруженные файлы',
   'STORAGE_ID' => $storage->getId()
));
if($folder){
   $newRights = array(
      Array(
         "ACCESS_CODE" => "U1", // Пользователь ID=1
         "TASK_ID" => "81"
      ),
     Array(
         "ACCESS_CODE" => "G1", // Группа пользователей ID=1
         "TASK_ID" => "81"
     ),
     Array(
        "ACCESS_CODE" => "AU", // Все авторизованные пользователи
        "TASK_ID" => 78
     ),
     Array(
        "ACCESS_CODE" => "G2", // Все пользователи
        "TASK_ID" => 78
     )
   );

   $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
   $rightsManager->append($folder->getRealObject(), $newRights);
}
по внутренеей ссылке получить файл: у битрикса разные внутренние ссылки
тут пример. как работать с 4мя типами
получить файл по названию папки и названию файла
if (\Bitrix\Main\Loader::includeModule('disk')){ 
      
   $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId(1); 
   if ($storage) 
   { 
      $root_folder = $storage->getRootObject(); 
      $targer_folder = $root_folder->getChild( 
         array( 
            '=NAME' => 'Загруженные файлы',  
            'TYPE' => \Bitrix\Disk\Internals\FolderTable::TYPE_FOLDER 
         ) 
      );
      $file = $targer_folder->getChild( 
         array( 
            '=NAME' => 'test.docx',  
            'TYPE' => \Bitrix\Disk\Internals\FileTable::TYPE_FILE 
         ) 
      ); 
      if ($file) 
      { 
         print_r($file);
      } 
   } 
}
получить диск по BASE_URL
$disks = \Bitrix\Disk\Storage::getList([
    "select"=>["ID","ENTITY_MISC_DATA"],
    "filter"=> [
               "ENTITY_TYPE"=>"Bitrix\Disk\ProxyType\Common",
               "ENTITY_MISC_DATA" => "%".$code."%"
     ]
]);
if($disk = $disks->fetch()){
  //
}

ОБРАБОТЧИКИ
обработчик, который при изменении пользователя диск ограничивает
AddEventHandler("main", "OnAfterUserUpdate", "SetMaxFileSizeDisk"); 
function SetMaxFileSizeDisk($arFields){ 
   $userId = $arFields["ID"]; 
   if(CModule::IncludeModule('disk')){ 
      $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId($userId); 
      $storage->setSizeLimit(1073741824); //1гб = 1073741824байт 
   } 
}
Задача: ограничить размер файла передаваемого в чате корпоративного портала
Решение: обработчик, который удаляет файлы в чате более 10мб
в init.php
AddEventHandler("im", "OnAfterFileUpload", "CheckFileSize");
function CheckFileSize($arFields){   
   if(!empty($arFields["FILE"]["size"]) && ($arFields["FILE"]["size"]>10485760) && CModule::IncludeModule("disk")){ //10мб
      $file = Bitrix\Disk\File::getById($arFields["FILE_ID"]);      
      if($file->delete(1)&&CModule::IncludeModule('im')){         
         CIMMessenger::Update($arFields["MESSAGE_ID"], 'Не удалось загрузить файл. Превышен размер в 10мб.');
      }

   }
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!