Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Передача нескольких файлов на сервер
Дальше: Текстовые файлы

Получение нескольких файлов с сервера

Рассмотрим теперь обратную задачу. Предположим, нам нужно сохранить на локальном компьютере все картинки товаров в виде файлов изображений и, возможно, поместить их в архив.

Для решения этой задачи добавим команду СохранитьКартинкиТоваровНаДиск. Обработчик команды заполним следующим образом (листинг 6.26).

Листинг 6.26. Обработчик команды «СохранитьКартинкиТоваровНаДиск»

&НаКлиенте

Процедура СохранитьКартинкиТоваровНаДиск(Команда)

 

ОписаниеФайловКартинок = ПолучитьКартинкиТоваров();

 

ФайлыКартинок = Новый Массив;

Для Каждого ФайлКартинки Из ОписаниеФайловКартинок Цикл

ФайлыКартинок.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлКартинки.ИмяФайла, ФайлКартинки.АдресСсылки));

КонецЦикла;

 

ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов("Выберите каталог для сохранения файлов картинок", Истина);

ПараметрыАрхива = Новый ПараметрыПолученияАрхиваФайлов("pict.zip", РежимПолученияАрхиваФайлов.ПолучатьАрхивВсегда);

 

НачатьПолучениеФайловССервера(ФайлыКартинок, ПараметрыДиалога);

//НачатьПолучениеФайловССервера(, ФайлыКартинок, "e:\test\");

//НачатьПолучениеФайловССервера(ФайлыКартинок, ПараметрыДиалога, ПараметрыАрхива);

 

КонецПроцедуры

В этом обработчике сначала с помощью функции ПолучитьКартинкиТоваров() мы получаем массив ОписаниеФайловКартинок, описывающий файлы картинок, которые должны быть получены с сервера (листинг 6.27).

Каждый файл описывается структурой с полями ИмяФайла и АдресСсылки. На каждом шаге цикла обхода элементов массива ОписаниеФайловКартинок мы создаем объект ОписаниеПередаваемогоФайла на основе значений полей этой структуры. Таким образом мы создаем массив ФайлыКартинок, описывающий файлы, которые мы будем получать на клиенте по адресу навигационной ссылки на реквизит товара и сохранять в локальную файловую систему с именем, заданным в описании файла.

Затем мы создаем объект ПараметрыДиалогаПолученияФайлов и задаем заголовок и признак отображения диалога.

И передаем массив получаемых файлов и параметры диалога получения файлов в метод глобального контекста НачатьПолучениеФайловССервера(), с помощью которого начинается получение файлов с картинками товаров и сохранение их в локальную файловую систему. При этом пользователю показывается диалог выбора каталога для сохранения файлов.

Можно также использовать вариант вызова этого метода с указанием в третьем параметре базового каталога расположения файлов вместо диалога выбора (см. закомментированный фрагмент кода). Но следует иметь в виду, что для работы этого метода в веб-клиенте потребуется установить расширение для работы с файлами. В то время как в первом случае это расширение не требуется.

Листинг 6.27. Функция «ПолучитьКартинкиТоваров()»

&НаСервереБезКонтекста

Функция ПолучитьКартинкиТоваров()

 

СсылкиКартинок = Новый Массив;

СписокТоваров = Справочники.Товары.Выбрать();

 

Пока СписокТоваров.Следующий() Цикл

Если Не СписокТоваров.ЭтоГруппа И Не ПустаяСтрока(СписокТоваров.ИмяФайлаКартинки) Тогда

ДанныеКартинки = Новый Структура("АдресСсылки, ИмяФайла",);

 

АдресКартинкиВХранилище = ПолучитьНавигационнуюСсылку(СписокТоваров.Ссылка, "ДанныеФайлаКартинки");

ДанныеКартинки.АдресСсылки = АдресКартинкиВХранилище;

ИмяФайлаКартинки = СписокТоваров.ИмяФайлаКартинки;

ДанныеКартинки.ИмяФайла = ИмяФайлаКартинки;

 

СсылкиКартинок.Добавить(ДанныеКартинки);

КонецЕсли;

КонецЦикла;

 

Возврат СсылкиКартинок;

 

КонецФункции

В этой функции мы обходим выборку из элементов справочника товаров. На каждом шаге цикла мы создаем структуру ДанныеКартинки с полями ИмяФайла и АдресСсылки и заполняем их соответственно значением реквизита ИмяФайлаКартинки и навигационной ссылкой на реквизит ДанныеФайлаКартинки каждого товара. И затем добавляем эту структуру в массив СсылкиКартинок, который и возвращает функция после завершения обхода выборки товаров.

Если требуется получить файлы в виде архива, то в метод НачатьПомещениеФайловНаСервер() последним параметром нужно передать объект ПараметрыПолученияАрхиваФайлов (см. закомментированный фрагмент кода в листинге 6.26).

Назад: Передача нескольких файлов на сервер
Дальше: Текстовые файлы