ПодготовитьФайлДляЗагрузки (БСП)

Автор: 1С
ОбщийМодуль.ОбменДаннымиСлужебный
БСП

Подготовить файл для загрузки.

Функция ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке) Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	ИдентификаторФайлаВоВременномХранилище = "";
	
	КаталогВременныхФайлов = ВременныйКаталогВыгрузки(ИдентификаторФайла);
	ИмяАрхива              = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, "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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ДиалогЗагрузкиФайла (БСП)

ОпределитьПараметрыЗагрузкиДанныхИзФайла (БСП)

ПроверитьРазмерФайлаДляЗагрузки (БСП)

ПараметрыЗагрузкиФайла (БСП)

ПередЗагрузкойФайлаОбменаДанными (БСП)

ПодготовитьHTTPЗапрос (БСП)

ПодготовитьВложения (БСП)

ЗагрузитьФайл (БСП)

TurboConf ИР адаптер 2.63