Получить файл из хранилища сервисе. Функция по переданному идентификатору скачивает файл из сервиса передачи файлов.
// Функция по переданному идентификатору скачивает файл из сервиса передачи файлов.
//
// Параметры:
// ИдентификаторФайла - УникальныйИдентификатор - идентификатор получаемого файла.
// ПараметрыДоступаКСервису - Структура: АдресСервиса, ИмяПользователя, ПарольПользователя.
// РазмерЧасти - Число - размер части в килобайтах. Если значение равно 0,
// то разбивка на части не производится.
// Возвращаемое значение:
// Строка - путь к полученному файлу.
//
Функция ПолучитьФайлИзХранилищаВСервисе(Знач ИдентификаторФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач ПараметрыАутентификации = Неопределено) Экспорт
// Возвращаемое значение функции.
ИмяФайлаРезультата = "";
ДополнительныеПараметры = Новый Структура("ПараметрыАутентификации", ПараметрыАутентификации);
Прокси = WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, , ДополнительныеПараметры);
ИдентификаторСессии = Неопределено;
КоличествоЧастей = Неопределено;
Прокси.PrepareGetFile(ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей);
ИменаФайлов = Новый Массив;
КаталогСборки = ПолучитьИмяВременногоФайла();
СоздатьКаталог(КаталогСборки);
ШаблонИмениФайла = "data.zip.[n]";
// Протоколирование событий обмена.
СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации");
СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных);
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"),
Формат(КоличествоЧастей, "ЧН=0; ЧГ=0"));
ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена);
Для НомерЧасти = 1 По КоличествоЧастей Цикл
ДанныеЧасти = Неопределено;
Попытка
Прокси.GetFilePart(ИдентификаторСессии, НомерЧасти, ДанныеЧасти);
Исключение
Прокси.ReleaseFile(ИдентификаторСессии);
ВызватьИсключение;
КонецПопытки;
ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[n]", Формат(НомерЧасти, "ЧГ=0"));
ИмяФайлаЧасти = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ИмяФайла);
ДанныеЧасти.Записать(ИмяФайлаЧасти);
ИменаФайлов.Добавить(ИмяФайлаЧасти);
КонецЦикла;
ДанныеЧасти = Неопределено;
Прокси.ReleaseFile(ИдентификаторСессии);
ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip");
ОбъединитьФайлы(ИменаФайлов, ИмяАрхива);
Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива);
Если Разархиватор.Элементы.Количество() = 0 Тогда
Попытка
УдалитьФайлы(КаталогСборки);
Исключение
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(),
УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'"));
КонецЕсли;
// Протоколирование событий обмена.
ФайлАрхива = Новый Файл(ИмяАрхива);
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"),
Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0"));
ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена);
ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, Разархиватор.Элементы[0].Имя);
Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки);
Разархиватор.Закрыть();
Файл = Новый Файл(ИмяФайла);
ВременныйКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ВременныйКаталог);
ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя);
ПереместитьФайл(ИмяФайла, ИмяФайлаРезультата);
Попытка
УдалитьФайлы(КаталогСборки);
Исключение
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(),
УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Возврат ИмяФайлаРезультата;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПолучитьФайлИзХранилищаМенеджераСервиса (БСП)
ПоместитьФайлВХранилищеМенеджераСервиса (БСП)
ПолучитьПрисоединенныйФайл (БСП)
ВыгрузитьОбластьВХранилищеМС (БСП)
ПолучитьФайлыКлассификаторов (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)