CModule::IncludeModule('disk'); //диск
\Bitrix\Main\Loader::includeModule('disk'); |
Посмотреть данные о диске тут:
Настройки - Производительность - Таблицы - b_disk_storage |
работа с файлом диска
$file = Bitrix\Disk\File::getById($fileId); //получить файл
$name = $file->getName(); // получим имя файла
$info = $file->getFile(); // получим информацию о файле
ptint_r($info);
//$info["CONTENT_TYPE"] - тип файла
//$info["SRC"] - путь файла
$link = \Bitrix\Disk\Driver::getInstance()->getUrlManager()->getUrlForShowFile($file); // получим ссылку на файл в Диске
$file->delete($userId); //удалить из-под пользователя
|
когда файл в поле
$sSrc = CFile::GetPath($fileId); //путь к файлу
$sFullSrc = $_SERVER['DOCUMENT_ROOT'].$sSrc; //полный путь к файлу |
удалить диск
$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мб.');
}
}
} |