Подготовить файл для загрузки.
Функция ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке) Экспорт
УстановитьПривилегированныйРежим(Истина);
ИдентификаторФайлаВоВременномХранилище = "";
КаталогВременныхФайлов = ВременныйКаталогВыгрузки(ИдентификаторФайла);
ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, "datafile.zip");
МассивПолученныхФайлов = НайтиФайлы(КаталогВременныхФайлов,"data.zip.*");
Если МассивПолученныхФайлов.Количество() > 0 Тогда
ФайлыДляОбъединения = Новый Массив();
ИмяЧастиФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, "data.zip.%1");
Для НомерЧасти = 1 По МассивПолученныхФайлов.Количество() Цикл
ФайлыДляОбъединения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяЧастиФайла, НомерЧасти));
КонецЦикла;
Иначе
ШаблонСообщения = НСтр("ru = 'Не найден ни один фрагмент сессии передачи с идентификатором %1.
|Необходимо убедиться, что в настройках программы заданы параметры
|""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'");
СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИдентификаторФайла));
ВызватьИсключение(СообщениеОбОшибке);
КонецЕсли;
Попытка
ОбъединитьФайлы(ФайлыДляОбъединения, ИмяАрхива);
Исключение
СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ВызватьИсключение(СообщениеОбОшибке);
КонецПопытки;
// Распаковать.
Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива);
Если Разархиватор.Элементы.Количество() = 0 Тогда
Попытка
УдалитьФайлы(КаталогВременныхФайлов);
Исключение
СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(),
УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке);
ВызватьИсключение(СообщениеОбОшибке);
КонецПопытки;
СообщениеОбОшибке = НСтр("ru = 'Файл архива не содержит данных.'");
ВызватьИсключение(СообщениеОбОшибке);
КонецЕсли;
ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, Разархиватор.Элементы[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К участников)