Рассмотрим пример добавления в архив файлов из выбранного пользователем каталога и соответствующих маске (в данном случае – «*.jpg»). Данная задача может быть выполнена с помощью следующего программного кода (листинги 6.137, 6.138, 6.139, 6.140).
Листинг 6.137. Пример добавления файлов в ZIP-архив
&НаКлиенте
Процедура ДобавлениеФайловВАрхив(Команда)
ВыбратьКаталог("Выбор каталога для поиска файлов",
Новый ОписаниеОповещения("ДобавитьФайлыВАрхивЗавершение", ЭтотОбъект));
КонецПроцедуры
Листинг 6.138. Процедура «ВыбратьКаталог()»
&НаКлиенте
Процедура ВыбратьКаталог(ЗаголовокДиалога, Оповещение)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Диалог.Заголовок = ЗаголовокДиалога;
Диалог.Показать(Оповещение);
КонецПроцедуры
Листинг 6.139. Обработчик оповещения «ДобавитьФайлыВАрхивЗавершение()»
&НаКлиенте
Процедура ДобавитьФайлыВАрхивЗавершение(ВыбранныеФайлы, Дополнительно) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
МаскаПоиска = ВыбранныеФайлы[0] + "\*.jpg";
АдресАрхиваВХранилище = ДобавитьФайлыВАрхивНаСервере(МаскаПоиска);
НачатьПолучениеФайлаССервера(, АдресАрхиваВХранилище, "c:\temp\pictures.zip");
КонецПроцедуры
Листинг 6.140. Функция «ДобавитьФайлыВАрхивНаСервере()»
&НаСервереБезКонтекста
Функция ДобавитьФайлыВАрхивНаСервере(МаскаПоиска)
Архив = Новый ЗаписьZIPФайла();
Архив.Добавить(МаскаПоиска,
РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ДанныеАрхива = Архив.ПолучитьДвоичныеДанные("", "",
МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);
Возврат ПоместитьВоВременноеХранилище(ДанныеАрхива);
КонецФункции
Сначала пользователю показывается диалог выбора каталога для поиска файлов, помещаемых в архив. Когда каталог выбран, на его основе формируется маска поиска и передается в функцию ДобавитьФайлыВАрхивНаСервере(), в которой новый архив создается как неинициализированный объект ЗаписьZIPФайла. Затем файлы по маске помещаются в архив и вызывается метод этого объекта ПолучитьДвоичныеДанные(), который получает ZIP-архив в виде двоичных данных и закрывает архив аналогично методу Записать(). Эти двоичные данные возвращаются на клиент в процедуру ДобавитьФайлыВАрхивЗавершение(), где файл архива получается в виде локального файла с явно заданным именем.