[API] Загрузка файла (Возобновляемая)

Позволяет загружать большие файлы размером до 1 ГБ в Хранилище Документерры. Этот метод поддерживает возможность приостановки и возобновления загрузки, а также отслеживание прогресса, что делает его удобным для работы с большими файлами или при нестабильном сетевом подключении.

Процесс загрузки состоит из двух последовательных шагов:

  1. Инициализация – один запрос, который запускает загрузку.
  2. Загрузка фрагментов – несколько запросов, каждый из которых отправляет часть файла. Фрагменты загружаются последовательно до полной передачи всего файла. Максимальный размер одного фрагмента — 10 МБ.

Шаг 1 - Запуск загрузки файла

POST storage/{file-path}?format={file-encode-format}&isOverwrite={is-overwrite}

Авторизация

Этот запрос требует базовой авторизации.

Параметры запроса

Параметры пути
file-path string Путь к файлу или папке относительно корня, т.е. все, что после...resources/Storage/.
Параметры поискового запроса
format string Кодировка файла. Поддерживается только resumable.
isOverwrite bool [опционально] Определяет, нужно ли перезаписывать существующий файл. Условие false (ложно) по умолчанию.

Примеры

Пример запроса
Bash (оболочка Unix)
curl --location -g --request POST 'https://{portal-url}/api/v1/storage/manual.zip?format=resumable&isOverwrite=true'

Тела запроса и ответа для этого метода пусты.

Шаг 2 - Загрузка частей файла

PUT storage/{file-path}?format={file-encode-format}

Авторизация

Этот запрос требует базовой авторизации.

Параметры запроса

Параметры пути
file-path
string Тот же путь, что был указан при инициализации загрузки на Шаге 1.
Параметры поискового запроса
format string Всегда resumable
Заголовки запроса
Content-Range string
Указывает диапазон байтов текущей части и общий размер файла. Формат: bytes {начало}-{конец}/{общий-размер} или bytes {начало}-{конец}/* (когда общий размер неизвестен). Значение {начало} должно быть равно последнему успешно загруженному байту + 1. Для финальной части {конец} + 1 должно равняться {общий-размер}.  Размер одной части ограничен 10 МБ. Пример: bytes 0-10485759/52428800.
Параметры тела запроса

Тело запроса содержит сырые байты части файла (бинарные данные).

Ответ

202 Accepted Промежуточный ответ. Фрагмент успешно получен, но загрузка еще не завершена. Ответ включает заголовок Content-Range, указывающий текущий прогресс. Если загрузка была прервана (например, из-за проблем с сетью), сервер также возвращает ответ 202 Accepted и включает заголовок Range ,указывающий успешно полученные байты: Range: bytes=0-{последний-загруженный-байт}. Загрузку можно возобновить с указанного байта.
201 Created
Финальный ответ. Последний фрагмент получен, и файл был успешно собран.

Примеры

Пример запроса Загрузка первой части:
Bash (оболочка Unix)
curl --location -g --request PUT 'https://{portal-url}/api/v1/storage/manual.zip?format=resumable' \
--header 'Content-Range: bytes 0-10485759/52428800' \
--data-binary @chunk1.bin

Загрузка последней части:
Bash (оболочка Unix)
curl --location -g --request PUT 'https://{portal-url}/api/v1/storage/manual.zip?format=resumable' \
--header 'Content-Range: bytes 41943040-52428799/52428800' \
--data-binary @last_chunk.bin

Пример тела ответа
JSON
{
  "content": null,
  "fileFullName": "Storage\\manual.zip",
  "fileName": "manual.docx",
  "isFolder": false,
  "modifiedBy": "admin",
  "modifiedOn": "2025-10-31T09:45:00",
  "size": 52428800
}

Поля ответа

content Всегда null при загрузке файлов.
fileFullName Полный путь к файлу в Хранилище.
fileName Имя файла.
isFolder Является ли объект папкой (false для файлов).
modifiedBy Пользователь, загрузивший файл.
modifiedOn Время последнего изменения (в формате ISO 8601).
size Размер файла в байтах.