Заметки
Как прикрепить файл к элементу инфоблока через REST
Как передать файл в свойство элемента списка или инфоблока через REST: формат файла, Base64 и особенности lists.element.add.
Через REST в файловое свойство списка обычно передают не путь к файлу, а имя и Base64-содержимое. После сохранения ссылку на файл лучше получать отдельным методом списков, а не собирать руками.
Задача
В списках и процессах Битрикс24 файл часто хранится в свойстве элемента. Через REST его нельзя передать как путь к локальному файлу на компьютере. Файл нужно закодировать и отправить в формате, который понимает REST.
Формат файла
Для обычного файлового свойства обычно используется пара: имя файла и содержимое в Base64. Конкретный код свойства зависит от списка.
BX24.callMethod(
'lists.element.add',
{
IBLOCK_TYPE_ID: 'lists',
IBLOCK_ID: 25,
ELEMENT_CODE: 'contract-001',
FIELDS: {
NAME: 'Договор',
PROPERTY_45: [
'contract.pdf',
'base64_encoded_content_here',
],
},
},
function (result) {
console.log(result.data());
}
); Если свойство множественное, передаётся массив файлов. Важно не передавать просто URL на файл, если метод ждёт содержимое файла.
Свойства элемента
В lists.element.add значения свойств передаются в FIELDS. Для свойства файла нужен именно код свойства, например PROPERTY_45. Его лучше заранее посмотреть через настройки списка или методы получения полей.
FIELDS: {
NAME: 'Документы',
PROPERTY_45: [
['contract.pdf', 'base64_1'],
['act.pdf', 'base64_2'],
],
} Как потом получить ссылку
После сохранения файла в элементе списка ссылку лучше получать штатным методом для файлов списка, а не собирать вручную из ID.
BX24.callMethod(
'lists.element.get.file.url',
{
IBLOCK_TYPE_ID: 'lists',
IBLOCK_ID: 25,
ELEMENT_ID: 1001,
FIELD_ID: 'PROPERTY_45',
},
function (result) {
console.log(result.data());
}
); Так меньше риска перепутать ID элемента, ID свойства и ID файла.