← Назад к заметкам

Заметки

Как прикрепить файл к элементу инфоблока через 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 файла.