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

Диск

\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-2024, «1С-Битрикс», 2024