Как организовать скачивание больших файлов в мобильном приложении 1С с индикацией прогресса?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка мобильных приложений на платформе 1С часто сталкивается с необходимостью передачи файлов значительного объема, например, для обновления APK-дистрибутива или загрузки медиа-контента. В условиях нестабильной мобильной связи скачивание «в один присест» может приводить к ошибкам и потере прогресса. Давайте разберем, как эффективно реализовать этот функционал, обеспечив пользователю наглядную информацию о ходе загрузки.

Понимание проблемы и выбор стратегии

Когда размер файла достигает 50 Мб и более, попытка выгрузить его одним HTTP-запросом становится рискованной. Если соединение прервется на 49-м мегабайте, пользователю придется начинать всё сначала, что крайне нерационально при ограниченном мобильном трафике. Проанализируем два основных подхода к решению этой задачи: использование штатных механизмов платформы и реализацию «самописного» алгоритма чанковой (почастной) загрузки.

Реализация через почастную загрузку (Чанкинг)

Рассмотрим подробнее метод, позволяющий программно управлять процессом скачивания. Вместо того чтобы запрашивать весь файл целиком, мы будем делить его на логические части. Этот подход делает систему устойчивой к сбоям.

  1. Определение размера файла. На первом этапе выполняем легкий запрос к серверу, чтобы получить общий размер файла, который мы собираемся скачать.
  2. Разбиение на части. Делим полученный объем, например, на 10 или 20 частей.
  3. Циклическое скачивание. В цикле запрашиваем каждую часть отдельно, используя возможности работы с двоичными данными.
  4. Склейка на устройстве. Последовательно сохраняем полученные куски в локальный файл или собираем их в памяти, дописывая новые данные в конец файла.
  5. Проверка целостности. Чтобы гарантировать, что файл не повредился в процессе передачи, обязательно используем хэширование (например, MD5 или SHA).

Для реализации этого метода на стороне 1С-сервера следует подготовить HTTP-сервис, который будет принимать параметры: имя файла, смещение (offset) и размер запрашиваемого куска. На мобильном клиенте процесс будет выглядеть следующим образом:


// Пример логики на мобильном приложении
Для НомерЧасти = 1 По КоличествоЧастей Цикл
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить(\"Смещение\", ТекущееСмещение);
    ПараметрыЗапроса.Вставить(\"Размер\", РазмерКуска);
    
    // Выполняем запрос к HTTP-сервису
    ДвоичныеДанныеЧасти = ВыполнитьЗапросКСерверу(ПараметрыЗапроса);
    
    // Записываем данные в файл
    ЗаписатьДанныеВФайл(ДвоичныеДанныеЧасти);
    
    // Обновляем прогресс-бар
    Элементы.ИндикаторЗагрузки.Значение = (НомерЧасти / КоличествоЧастей) * 100;
КонецЦикла;

Использование заголовка Range для докачки

Если мы не хотим изобретать свою подсистему деления файлов, можно воспользоваться протоколом HTTP на более низком уровне. Заголовок Range позволяет серверу отдавать не весь файл, а лишь указанный диапазон байтов. В 1С мы можем управлять заголовками запросов с помощью объекта HTTPЗапрос.

Если соединение прервалось, мобильное приложение проверяет текущий размер уже скачанного локального файла и отправляет новый запрос, указывая в заголовке Range: bytes=X-, где X — это количество уже полученных байтов. Это позволяет продолжить загрузку ровно с того места, где она оборвалась.

GET или POST: есть ли разница?

Часто возникает вопрос: какой метод HTTP выбрать для скачивания? Технически, для передачи больших объемов данных через HTTP-сервис 1С, существенной разницы между GET и POST нет. Оба метода эффективно справляются с задачей. Однако стоит учесть следующие архитектурные особенности:

Рекомендации по обновлению мобильных приложений

Хотя реализация загрузки через 1С — отличная задача для программиста, важно помнить: если речь идет об обновлении самого APK-файла, стоит рассмотреть штатные способы доставки обновлений (магазины приложений или MDM-системы). Установка сторонних APK требует специфических разрешений системы Android, которые не всегда можно корректно обработать средствами стандартной конфигурации 1С. Тем не менее, для загрузки отчетов, медиа или данных внутри вашего приложения, описанный выше метод почастной загрузки является самым надежным и профессиональным решением.

← На главную