Скачивание и заливка каталога архивом
Обзор
Методы DOWNLOADZIP и UPLOADZIP позволяют работать с каталогом целиком: скачать его одним архивом и залить структуру файлов из архива. Это избавляет от необходимости выполнять по запросу на каждый файл.
Методы доступны в разделах со структурой tree — там, где есть вложенные каталоги. Структура раздела приходит в поле structure описания разделов.
Те же методы применяются к вложениям сценариев, см. Вложения сценариев IVR.
Запросы
| HTTP verb | Endpoint | Описание |
|---|---|---|
|
|
|
|
|
Скачивание каталога архивом
Упаковывает каталог со всем содержимым и отдаёт архив.
Особенности
-
Применимо и к корню раздела, и к любому его подкаталогу.
-
Имя архива формируется из имени раздела и пути каталога:
cacerts.zip,files-certificates-2026.zip. -
Объём каталога проверяется до упаковки. Отказ
409наступает, когда в каталоге 10 000 файлов и больше либо объём достигает 2 000 000 000 байт: предел здесь — первый отклоняемый размер. Временный архив при отказе не создаётся. -
Имена файлов в кодировке UTF-8 сохраняются.
-
Символические ссылки, ведущие за пределы упаковываемого каталога, в архив не попадают. Внутренние ссылки сохраняются как ссылки.
Заливка каталога архивом
Распаковывает содержимое архива в указанный каталог.
Особенности
-
Предельный размер тела запроса — 2 000 000 000 байт. Запрос такого размера и больше отвергается с кодом
413: предел здесь — первый отклоняемый размер, а не последний допустимый. Запрос с телом, но без заголовкаContent-Length, отвергается с кодом411: объём нечем проверить до приёма. -
Суммарный объём распакованных данных не должен превышать 2 000 000 000 байт. Он вычисляется по оглавлению архива, до записи на диск, поэтому слишком большой архив отвергается сразу, а не после частичной распаковки. В отличие от предела на тело запроса, здесь отказ наступает при превышении: ровно предельный объём допускается.
-
Отдельный файл внутри архива не должен превышать общий предел размера файла — 512 МБ. Запись сверх него отвергает архив целиком, с указанием её имени.
-
В разделах со структурой
treeструктура архива сохраняется: записьsub/report.pdfложится в подкаталогsub, недостающие каталоги создаются. -
В разделах со структурой
flatподкаталогов не бывает, поэтому иерархия архива отбрасывается и все записи ложатся в один уровень. Так же ведёт себя заливка вложений сценариев. -
Существующие файлы с совпадающими именами перезаписываются.
-
Содержимое каталога, не затронутое архивом, сохраняется.
-
Архив проверяется на безопасность до и после распаковки, см. Требования к содержимому архива. Небезопасный архив отвергается целиком, до целевого каталога не доходит ничего.
Запрос
UPLOADZIP /rest/v1/fs/targets/files/certificates HTTP/1.1
Content-Type: application/zip
BINARY BODY OF ARCHIVE
Ответ
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
[
{ "name" : "1789660649498", "status" : "ok" }
]
Ответ содержит по элементу на каждый принятый архив, а не на каждый файл внутри него: name — внутренний идентификатор архива, status — итог его распаковки. Состав распакованного узнаётся листингом каталога.
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json; charset=utf-8
{
"error_code" : 1406,
"error_message" : "Archive rejected: entries must stay inside the archive"
}
Требования к содержимому архива
Содержимое архива не должно выходить за его пределы. Архив, нарушающий это правило, отвергается целиком: на диск не попадает ни один файл из него, включая безопасные.
Архив отвергается целиком и в том случае, если превышает пределы объёма: суммарный распакованный размер сверх 2 ГБ либо отдельная запись сверх max_file_size раздела. Оба случая определяются по оглавлению, до распаковки.
Недопустимы:
-
записи с сегментами
..в пути; -
записи с абсолютными путями;
-
символические ссылки, цель которых находится за пределами архива;
-
записи, имя которых сервер не сможет адресовать: если любой сегмент пути записи оканчивается на
!<метод>, где<метод>— метод, поддерживаемый разделом, такой файл или каталог оказался бы недостижим. См. Нестандартные методы в пути.
Внутренние символические ссылки допускаются и сохраняются при распаковке.
Правило действует во всех режимах распаковки и для всех потребителей архивов на платформе, включая вложения сценариев. Отдельного «нестрогого» режима нет.
|
Архивы, полученные через Пределы упаковки и распаковки согласованы так, чтобы всё, что можно скачать архивом, можно было и залить обратно: упаковка отклоняет каталог объёмом 2 000 000 000 байт, а распаковка такой объём ещё принимает. Если бы соотношение было обратным, нашёлся бы каталог, который можно скачать и нельзя вернуть. |