В документации подходящего для моего случая примера не нашёл. Подскажите, пожалуйста, каким методом нужно искать файл в папке на диске группы соц. сети, мне бы хотелось, например, получить id файла по его названию (привожу скриншот в качестве пояснения).
Я могу найти нужный файл при помощи CFile::GetList, но его ID не соответствует ID файла на диске. Возможно, для работы с файлами на диске используется набор более новых методов? Если так, то каким образом сейчас можно создать файл на битрикс-диске и как потом найти его по названию?
В битриксе все файлы хранятся в папке upload, но при загрузке все они фиксируются в таблице b_file. Собственно апи CFile работает именно с таблицей b_file и самими файлами.
Модуль "Диск" является НАДСТРОЙКОЙ над этой системой, для пользователя, соответственно обычно API не подойдет (вернее подойдет, но не совсем - увидите дальше).
Чтобы найти файл, Вам нужно знать где искать, а именно в каком хранилище. Есть несколько способов это сделать, давайте рассмотрим конкретный случай - вы знаете как называется файл, но не знаете где он лежит.
Итак, точное название файла мы не знаем, но оно содержит в себе слово "файл";
Код
// Уменьшаем количество кода
use Bitrix\Main\Loader;
use Bitrix\Disk;
if ( Loader::IncludeModule('disk') )
{
$diskFile = Disk\File::load(['%NAME'=>'файл']);
// Если файл нашелся и он существует, то в $diskFile будет объект класса Bitrix\Disk\File, для работы с ним
// На этот классе можно вызвать метод getFile(), который вернет вам структуру из b_file, либо
// через класс \Bitrix\Disk\UrlManager при помощи методов getUrlForDownloadFile / getUrlForShowFile
// сразу получить ссылку на скачивание или просмотр
}
Все немножечко печальнее, если таких файлов может быть N-штук.
Код
// Уменьшаем количество кода
use Bitrix\Main\Loader;
use Bitrix\Disk;
if ( Loader::IncludeModule('disk') )
{
$arDiskFiles = Disk\Internals\FileTable::getList(['filter'=>['%NAME'=>'файл']]);
// Работает для версии main старше 17.0
foreach( $arDiskFiles as $arFile )
{
$file = Disk\BaseObject::buildFromArray($arFile);
// Опять же в $file будет объект класса Bitrix\Disk\File
}
}
Андрей Николаев, подскажите, может знаете, а есть возможность переименовывать файлы вложенные в элементе в поле типа файл с помощью d7 api ? Ссылки на них также хранятся в таблице b_file, но с помощью Disk\Internals\FileTable::getList их не вывести ( Или только напрямую работать с БД (тут пример есть внизу страницы https://off-group.com/blog/pereimenovyvaem-kartinki-i-prochie-fayly-v-bitriks/)