Метод disk.folder.uploadfile загружает файл в конкретную папку Битрикс24.Диска. Он поддерживает два режима: передачу содержимого сразу в base64 и двухшаговую загрузку через временный uploadUrl — второй незаменим для больших файлов. Разбираем оба сценария.
Структура Диска и папки
Битрикс24.Диск устроен иерархически: есть хранилища (storage) — личные, групповые, общий диск компании, — а внутри них папки и файлы. Чтобы загрузить файл, нужен идентификатор целевой папки.
disk.storage.getlist— список доступных хранилищ;disk.storage.getchildren— содержимое хранилища (папки и файлы верхнего уровня);disk.folder.getchildren— содержимое папки;disk.folder.addsubfolder— создать подпапку.
Метод disk.folder.uploadfile принимает id папки, куда кладётся файл. Именно у папки, а не у хранилища.
disk.* работает с самостоятельным файловым хранилищем Битрикс24, у файлов есть свои права, версии и ссылки.Способ 1: передача base64
Простой вариант — передать содержимое файла прямо в запросе через параметр fileContent (массив из имени файла и base64):
POST https://portal.bitrix24.ru/rest/1/xxxxx/disk.folder.uploadfile.json
{ "id": 145, "data": { "NAME": "act.pdf" }, "fileContent": [ "act.pdf", "JVBERi0xLjQKJ..." ] }Параметр id — идентификатор папки, data[NAME] — итоговое имя файла на Диске, fileContent — имя и содержимое в base64. В ответ приходит объект файла с полями ID, NAME, DOWNLOAD_URL и другими.
Способ 2: двухшаговая загрузка
Для больших файлов сначала запрашивают адрес загрузки, а затем отправляют туда сам файл обычным multipart-запросом:
- Вызов
disk.folder.uploadfileсidпапки, но без содержимого. В ответе приходит полеuploadUrlиfield— имя поля для файла. - POST-запрос на полученный
uploadUrlс теломmultipart/form-data, где файл передан в указанном поле. - После успешной отправки Диск возвращает объект созданного файла.
Этот путь не гоняет base64 через основной REST-эндпоинт и обходит ограничение на размер тела. Он аналогичен загрузке версий (disk.file.uploadversion) и другим файловым операциям Диска.
Что возвращает метод
Успешный ответ содержит объект файла Диска. Основные поля:
| Поле | Назначение |
|---|---|
| ID | Идентификатор файла на Диске |
| NAME | Имя файла |
| SIZE | Размер в байтах |
| CREATE_TIME | Дата создания |
| DOWNLOAD_URL | Ссылка на скачивание (с токеном) |
| DETAIL_URL | Ссылка на карточку файла в интерфейсе |
По полученному ID файл можно получить через disk.file.get, переименовать, переместить или удалить, а также прикрепить к сущностям через механизм присоединённых объектов.
Связанные методы Диска
Загрузка редко существует изолированно. Рядом обычно используются:
disk.file.get— получить метаданные файла;disk.file.uploadversion— загрузить новую версию существующего файла;disk.file.markdeleted/disk.file.restore— удаление в корзину и восстановление;disk.folder.addsubfolder— создать целевую папку перед загрузкой;disk.attachedObject.get— работа с прикреплёнными к задачам и записям файлами.
Типовой сценарий интеграции: создать папку под сделку → загрузить туда документы → отдать пользователю DETAIL_URL или прикрепить файл к задаче.
Практика и ошибки
- Права disk. Методам Диска нужно разрешение
diskу вебхука или приложения. - Права на папку. Даже с общим правом
diskзагрузка в чужую папку требует прав доступа к ней у пользователя, от имени которого работает вебхук. - Имя файла. Задавайте
data[NAME]с расширением — от него зависит определение типа и предпросмотр. - Дубли имён. При совпадении имён Диск может создать копию с суффиксом; для обновления содержимого используйте
disk.file.uploadversion. - Срок жизни uploadUrl. Временный адрес действует ограниченное время — отправляйте файл сразу после получения ссылки.
Итог
Метод disk.folder.uploadfile кладёт файл в папку Битрикс24.Диска двумя способами: быстрым base64 для небольших файлов и двухшаговым через uploadUrl для крупных. Целевую папку и её идентификатор находят через disk.storage и disk.folder, а в ответе получают объект файла с ID и ссылками.
Когда документы, акты и выгрузки должны автоматически попадать на Диск, привязываться к сделкам и версионироваться, нужна аккуратная работа с правами, дублями и лимитами. Мы проектируем и реализуем такие интеграции с Битрикс24 и сопровождаем их под SLA.
Частые вопросы
Куда именно загружается файл этим методом?
В папку Диска, идентификатор которой передаётся в параметре id. Не в хранилище целиком, а в конкретную папку внутри него.
Какие есть способы передать содержимое файла?
Два: сразу в base64 через параметр fileContent и двухшагово — сначала получить uploadUrl, затем отправить файл multipart-запросом на этот адрес.
Когда использовать двухшаговую загрузку?
Для больших файлов, которые не помещаются в тело REST-запроса при кодировании в base64. Двухшаговый способ обходит ограничение на размер тела.
Как найти идентификатор нужной папки?
Через disk.storage.getlist и disk.storage.getchildren либо disk.folder.getchildren. При необходимости папку создают методом disk.folder.addsubfolder.
Что возвращает метод после загрузки?
Объект файла Диска с полями ID, NAME, SIZE, DOWNLOAD_URL и DETAIL_URL. По ID файлом можно управлять дальше через disk.file.*.
Как обновить содержимое существующего файла?
Не повторной загрузкой, а методом disk.file.uploadversion, который добавляет новую версию к тому же файлу без создания дубля.
Какие права нужны для загрузки на Диск?
Требуется разрешение disk у вебхука или приложения, а также права доступа к целевой папке у пользователя, от имени которого выполняется запрос.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.