Обработка файлов
Методы REST-сервиса получают файлы в виде строки, закодированной в base64. Также можно отправить обычный массив, первым элементом которого будет имя файла, вторым - содержимое в base64.
В случае полностью клиентского приложения можно либо воспользоваться объектом FileReader, либо просто отдать в качестве значения поля запроса ссылку на элемент формы типа "файл" (<input type="file">
).
Пример
<input type="file" id="testfile"><br /> <span onclick="sendInputFile()">send file from inputsend static file function sendInputFile() { BX24.callMethod('entity.item.add', { 'ENTITY': 'menu', 'NAME': Math.random(), 'DETAIL_PICTURE': document.getElementById('testfile') }, function(){ alert('Finished!'); }); } /* POST https://my.bitrix24.com/rest/entity.item.add.json HTTP/1.1 Host: my.bitrix24.com Content-Length: 186 Content-Type: text/plain; charset=UTF-8 auth=6a8c365cb010ba42bd5b0f6ae803f47c&ENTITY=menu&NAME=0.2630483947652045&DETAIL_PICTURE[0]=1.gif&DETAIL_PICTURE[1]=R0lGODlhAQABAIAAAP%2F%2F%2FwAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D */ function sendStaticFile() { BX24.callMethod('entity.item.add', { 'ENTITY': 'menu', 'NAME': '1.gif', 'DETAIL_PICTURE': ['1.gif', 'R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='] }, function(){ alert('Finished!'); }); } /* POST https://my.bitrix24.com/rest/entity.item.add.json HTTP/1.1 Host: my.bitrix24.com Content-Length: 173 Content-Type: text/plain; charset=UTF-8 auth=6a8c365cb010ba42bd5b0f6ae803f47c&ENTITY=menu&NAME=1.gif&DETAIL_PICTURE[0]=1.gif&DETAIL_PICTURE[1]=R0lGODlhAQABAIAAAP%2F%2F%2FwAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D */ </script>
Для методов CRM при добавлении картинки для товара вместо
'DETAIL_PICTURE': ['1.gif', 'R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==']
используйте
"PREVIEW_PICTURE": {"fileData": ["1.gif", "R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="]}
Такая особенность вызвана тем, что в CRM поддерживается удаление файлов.
Для удаления картинки из поля, нужно вначале получить ID файла картинки в поле PHOTO методом crm.contact.get и после передать его с параметром remove в метод crm.contact.update, как пример, в контакте 308 удаляем фото ID 11062 (REGISTER_SONET_EVENT можно не передавать):
BX24.callMethod( "crm.contact.update", { id: 308, fields: { "PHOTO": {id: 11062, remove: 'Y'} }, params: { "REGISTER_SONET_EVENT": "Y" } }, function(result) { if(result.error()) console.error(result.error()); else { console.info(result.data()); } } );