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

Добавление выбранных файлов в архив

Рассмотрим пример добавления в архив произвольных файлов, выбранных пользователем. Данная задача может быть выполнена с помощью следующего программного кода (листинги 6.141, 6.142, 6.143, 6.144).

Листинг 6.141. Пример добавления файлов в ZIP-архив

&НаКлиенте

Процедура ЗаписатьФайлыВАрхив(Команда)

 

ПоместитьФайлыВАрхив(Новый ОписаниеОповещения("ПоместитьФайлыВАрхивЗавершение", ЭтотОбъект));

 

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

Листинг 6.142. Процедура «ПоместитьФайлыВАрхив()»

&НаКлиенте

Процедура ПоместитьФайлыВАрхив(ОповещениеОЗавершении)

 

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

НачатьПомещениеФайловНаСервер(ОповещениеОЗавершении, , , ПараметрыДиалога, УникальныйИдентификатор);

 

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

Листинг 6.143. Обработчик оповещения «ПоместитьФайлыВАрхивЗавершение()»

&НаКлиенте

Процедура ПоместитьФайлыВАрхивЗавершение(ПомещенныеФайлы, Дополнительно) Экспорт

 

Если ПомещенныеФайлы = Неопределено Тогда

Возврат;

КонецЕсли;

 

АдресаДобавляемыхФайлов = Новый Массив;

ИменаДобавляемыхФайлов = Новый Массив;

 

Для Каждого ДобавляемыйФайл Из ПомещенныеФайлы Цикл

АдресаДобавляемыхФайлов.Добавить(ДобавляемыйФайл.Адрес);

ИменаДобавляемыхФайлов.Добавить(ДобавляемыйФайл.СсылкаНаФайл.Имя);

КонецЦикла;

 

АдресФайлаВХранилище = ЗаписатьФайлыВАрхивНаСервере(АдресаДобавляемыхФайлов, ИменаДобавляемыхФайлов);

 

НачатьПолучениеФайлаССервера(, АдресФайлаВХранилище, "e:\test\arc.zip");

 

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

Листинг 6.144. Функция «ЗаписатьФайлыВАрхивНаСервере()»

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

Функция ЗаписатьФайлыВАрхивНаСервере(МассивАдресовФайлов, МассивИменФайлов)

 

Архив = Новый ЗаписьZIPФайла();

 

Индекс = 0;

Для Каждого АдресДобавляемогоФайла Из МассивАдресовФайлов Цикл

ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДобавляемогоФайла);

ИмяФайла = КаталогВременныхФайлов() + МассивИменФайлов[Индекс];

ДанныеФайла.Записать(ИмяФайла);

 

Архив.Добавить(ИмяФайла,

РежимСохраненияПутейZIP.НеСохранятьПути, РежимОбработкиПодкаталоговZIP.НеОбрабатывать);

 

Индекс = Индекс + 1;

 

КонецЦикла;

 

ДанныеАрхива = Архив.ПолучитьДвоичныеДанные("", "",

МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);

 

Возврат ПоместитьВоВременноеХранилище(ДанныеАрхива);

 

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

Сначала пользователю показывается диалог множественного выбора файлов, добавляемых в архив, и начинается помещение выбранных файлов на сервер. Когда все файлы помещены, адреса во временном хранилище и имена помещенных файлов в виде двух отдельных массивов передаются в функцию ЗаписатьФайлыВАрхивНаСервере().

В этой функции элементы массива помещенных файлов обходятся в цикле, данные каждого файла записываются во временный файл и этот файл добавляется в неинициализированный архив. Затем методом ПолучитьДвоичныеДанные() этот архив получается в виде двоичных данных, которые функция возвращает на клиент в процедуру ПоместитьФайлыВАрхивЗавершение(), где файл архива получается в виде локального zip-файла.

Назад: Добавление в архив файлов по маске
Дальше: Распаковка файлов из архива