refactor: Изменение подхода описания передаваемого файла

This commit is contained in:
Dmitry Ivanov
2024-11-13 21:02:54 +03:00
parent 8a0d89f619
commit cebcb0bba2
5 changed files with 91 additions and 71 deletions
@@ -4,12 +4,7 @@
Перем ИмяПользователя Экспорт; // Строка
Перем ПарольПользователя Экспорт; // Строка
Перем ОтправляемыеТекстовыеДанные Экспорт; // Массив из Строка
Перем Файлы Экспорт; // Массив из Структура:
// - ИмяФайла - Строка
// - ПрочитатьСодержимое - Булево
// - КодироватьСодержимое - Булево
// - УдалятьПереводыСтрок - Булево
// - Ключ - Строка
Перем Файлы Экспорт; // Массив из см. ПередаваемыйФайл
Перем ПередаватьОтправляемыеДанныеВСтрокуЗапроса Экспорт; // Булево
Перем ИмяФайлаСертификатаКлиента Экспорт; // Строка
Перем ПарольСертификатаКлиента Экспорт; // Строка
@@ -0,0 +1,17 @@
Перем ИмяФайла Экспорт; // Строка
Перем Назначение Экспорт; // см. НазначенияФайлов
Перем ПрочитатьСодержимое Экспорт; // Булево
Перем КодироватьСодержимое Экспорт; // Булево
Перем УдалятьПереносыСтрок Экспорт; // Булево
Перем Ключ Экспорт; // Строка
Процедура ПриСозданииОбъекта(пИмяФайла = "", пНазначение = Неопределено)
ИмяФайла = пИмяФайла;
Назначение = пНазначение;
ПрочитатьСодержимое = Ложь;
КодироватьСодержимое = Ложь;
УдалятьПереносыСтрок = Ложь;
Ключ = "";
КонецПроцедуры
@@ -0,0 +1,5 @@
Перем ТелоЗапроса Экспорт;
Перем СтрокаЗапроса Экспорт;
ТелоЗапроса = "ТелоЗапроса";
СтрокаЗапроса = "СтрокаЗапроса";
@@ -9,7 +9,9 @@
Перем ИмяПараметраHTTPЗапрос;
Перем ИмяПараметраHTTPОтвет;
Перем ИменаПеременныхОтправляемыхТекстовыхДанныхИзФайла;
Перем ПрочитанныеФайлы; // Массив из Структура
// - ПередаваемыйФайл
// - ИмяПеременной
Перем ИспользуетсяЗащищенноеСоединение; // Булево
Процедура ПриСозданииОбъекта()
@@ -20,7 +22,7 @@
ИмяПараметраHTTPЗапрос = "HTTPЗапрос";
ИмяПараметраHTTPОтвет = "HTTPОтвет";
ИменаПеременныхОтправляемыхТекстовыхДанныхИзФайла = Новый Массив;
ПрочитанныеФайлы = Новый Массив;
ИспользуетсяЗащищенноеСоединение = Ложь;
КонецПроцедуры
@@ -38,7 +40,7 @@
ВывестиЗаголовки();
ВывестиЗащищенноеСоединение(СтруктураURL);
ВывестиHTTPСоединение(СтруктураURL);
ВывестиИнициализациюОтправляемыхТекстовыхДанныхИзФайла();
ВывестиЧтениеФайлов();
ВывестиHTTPЗапрос(СтруктураURL);
ВывестиУстановкуТелаЗапросаТекстовымиДанными();
ВывестиУстановкуТелаЗапросаДвоичнымиДанными();
@@ -148,19 +150,19 @@
КонецПроцедуры
Процедура ВывестиИнициализациюОтправляемыхТекстовыхДанныхИзФайла()
Процедура ВывестиЧтениеФайлов()
ИменаПеременныхОтправляемыхТекстовыхДанныхИзФайла.Очистить();
ПрочитанныеФайлы.Очистить();
НомерФайла = 1;
Для Каждого ОписаниеФайла Из ОписаниеЗапроса.Файлы Цикл
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
Если Не (ОписаниеФайла.ПрочитатьСодержимое
Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
Или ОписаниеЗапроса.ПередаватьОтправляемыеДанныеВСтрокуЗапроса) Тогда
Продолжить;
КонецЕсли;
ИмяПараметра = "ТекстовыеДанныеИзФайла_" + Формат(НомерФайла, "ЧГ=");
ИмяПеременной = "ТекстовыеДанныеИзФайла_" + Формат(НомерФайла, "ЧГ=");
ВывестиПустуюСтроку();
@@ -168,29 +170,30 @@
|ТекстовыйДокумент.Прочитать(%2);
|%1 = ТекстовыйДокумент.ПолучитьТекст();";
Если ОписаниеФайла.УдалятьПереводыСтрок Тогда
Если ПередаваемыйФайл.УдалятьПереносыСтрок Тогда
Шаблон = Шаблон + "
|%1 = СтрЗаменить(%1, Символы.ПС, """");
|%1 = СтрЗаменить(%1, Символы.ВК, """");";
КонецЕсли;
Если ОписаниеФайла.КодироватьСодержимое Тогда
Если ПередаваемыйФайл.КодироватьСодержимое Тогда
Шаблон = Шаблон + "
|%1 = КодироватьСтроку(%1, СпособКодированияСтроки.URLВКодировкеURL);";
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеФайла.Ключ) Тогда
Если ЗначениеЗаполнено(ПередаваемыйФайл.Ключ) Тогда
Шаблон = Шаблон + "
|%1 = """ + ОписаниеФайла.Ключ + "="" + %1;";
|%1 = """ + ПередаваемыйФайл.Ключ + "="" + %1;";
КонецЕсли;
Текст = СтрШаблон(Шаблон,
ИмяПараметра,
ОбернутьКавычками(ОписаниеФайла.ИмяФайла));
ИмяПеременной,
ОбернутьКавычками(ПередаваемыйФайл.ИмяФайла));
ВывестиСтроку(Текст);
ИменаПеременныхОтправляемыхТекстовыхДанныхИзФайла.Добавить(ИмяПараметра);
ПрочитанныйФайл = Новый Структура("ПередаваемыйФайл, ИмяПеременной", ПередаваемыйФайл, ИмяПеременной);
ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
НомерФайла = НомерФайла + 1;
КонецЦикла;
@@ -201,7 +204,7 @@
ПараметрыФункции = Новый Массив;
АдресРесурсаКод = ПолучитьКодДляВыводаАдресаРесурса(СтруктураURL);
АдресРесурсаКод = ПолучитьКодСборкиАдресаРесурса(СтруктураURL);
Если СтрЧислоСтрок(АдресРесурсаКод) > 1 Тогда
ВывестиПустуюСтроку();
ВывестиСтроку(СтрШаблон("АдресРесурса = %1;", АдресРесурсаКод));
@@ -219,13 +222,18 @@
КонецПроцедуры
Функция ПолучитьКодДляВыводаАдресаРесурса(СтруктураURL)
Функция ПолучитьКодСборкиАдресаРесурса(СтруктураURL)
Кавычка = """";
КонкатенацияСПереносомСтрокиИАмперсандом = "
| + ""&"" + ";
КонкатенацияСПереносомСтроки = "
| + ";
КавычкаЗакрыта = Ложь;
Код = Кавычка + СтруктураURL.Путь;
СтрокаЗапроса = СобратьИсходнуюСтрокуЗапроса(СтруктураURL);
Если ОписаниеЗапроса.ПередаватьОтправляемыеДанныеВСтрокуЗапроса Тогда
ОтправляемаяСтрока = СтрСоединить(ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, "&");
@@ -236,23 +244,29 @@
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаЗапроса) Тогда
Код = Код + "?" + СтрокаЗапроса;
КодПрочитанныхФайлов = "";
Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
Если ОписаниеЗапроса.ПередаватьОтправляемыеДанныеВСтрокуЗапроса
Или ПрочитанныйФайл.ПередаваемыйФайл.Назначение = НазначенияФайлов.СтрокаЗапроса Тогда
КодПрочитанныхФайлов = КодПрочитанныхФайлов
+ ?(КодПрочитанныхФайлов = "", "", КонкатенацияСПереносомСтрокиИАмперсандом)
+ ПрочитанныйФайл.ИмяПеременной;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(СтрокаЗапроса)
Или ЗначениеЗаполнено(КодПрочитанныхФайлов) Тогда
Код = Код + "?";
КонецЕсли;
Если ОписаниеЗапроса.ПередаватьОтправляемыеДанныеВСтрокуЗапроса
И ИменаПеременныхОтправляемыхТекстовыхДанныхИзФайла.Количество() Тогда
Код = Код + СтрокаЗапроса;
Разделитель = "
| + ""&"" + ";
Если Не ЗначениеЗаполнено(СтрокаЗапроса) Тогда
Код = Код + "?";
Иначе
Код = Код + Кавычка + Разделитель;
КонецЕсли;
Код = Код + СтрСоединить(ИменаПеременныхОтправляемыхТекстовыхДанныхИзФайла, Разделитель);
Если ЗначениеЗаполнено(КодПрочитанныхФайлов) Тогда
Код = Код + Кавычка
+ ?(ЗначениеЗаполнено(СтрокаЗапроса),
КонкатенацияСПереносомСтрокиИАмперсандом,
КонкатенацияСПереносомСтроки)
+ КодПрочитанныхФайлов;
КавычкаЗакрыта = Истина;
КонецЕсли;
@@ -287,7 +301,11 @@
ЭлементыТелаЗапросаДляВывода.Добавить(ОбернутьКавычками(ОтправляемаяСтрока));
КонецЕсли;
ОбщегоНазначения.ДополнитьМассив(ЭлементыТелаЗапросаДляВывода, ИменаПеременныхОтправляемыхТекстовыхДанныхИзФайла);
Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = НазначенияФайлов.ТелоЗапроса Тогда
ЭлементыТелаЗапросаДляВывода.Добавить(ПрочитанныйФайл.ИмяПеременной);
КонецЕсли;
КонецЦикла;
КоличествоЭлементов = ЭлементыТелаЗапросаДляВывода.Количество();
Если КоличествоЭлементов = 1 Тогда
@@ -313,16 +331,17 @@
КонецЕсли;
ЭтоПервыйФайл = Истина;
Для Каждого ОписаниеФайла Из ОписаниеЗапроса.Файлы Цикл
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
Если ОписаниеФайла.ПрочитатьСодержимое Тогда
Если ПередаваемыйФайл.ПрочитатьСодержимое
Или Не ПередаваемыйФайл.Назначение = НазначенияФайлов.ТелоЗапроса Тогда
Продолжить;
КонецЕсли;
ВывестиСтроку(СтрШаблон("%1%2.УстановитьИмяФайлаТела(%3);",
?(ЭтоПервыйФайл, "", "// "),
ИмяПараметраHTTPЗапрос,
ОбернутьКавычками(ОписаниеФайла.ИмяФайла)));
ОбернутьКавычками(ПередаваемыйФайл.ИмяФайла)));
ЭтоПервыйФайл = Ложь;
@@ -185,12 +185,11 @@
Если Лев(Данные, 1) = "@" Тогда
ИмяФайла = Сред(Данные, 2);
ПередаваемыеДанные = ОписаниеПередаваемогоФайла();
ПередаваемыеДанные.ИмяФайла = ИмяФайла;
ПередаваемыеДанные.ПрочитатьСодержимое = Истина;
ПередаваемыеДанные.УдалятьПереводыСтрок = Истина;
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, НазначенияФайлов.ТелоЗапроса);
ПередаваемыйФайл.ПрочитатьСодержимое = Истина;
ПередаваемыйФайл.УдалятьПереносыСтрок = Истина;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыеДанные);
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
Иначе
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(Данные);
КонецЕсли;
@@ -217,10 +216,8 @@
ИмяФайла = Сред(ИмяФайла, 2);
КонецЕсли;
ПередаваемыеДанные = ОписаниеПередаваемогоФайла();
ПередаваемыеДанные.ИмяФайла = ИмяФайла;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыеДанные);
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, НазначенияФайлов.ТелоЗапроса);
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
КонецЦикла;
КонецПроцедуры
@@ -245,13 +242,12 @@
Ключ = Сред(Данные, 1, ПозицияСобачки - 1);
ИмяФайла = СокрЛП(Сред(Данные, ПозицияСобачки + 1));
ПередаваемыеДанные = ОписаниеПередаваемогоФайла();
ПередаваемыеДанные.Ключ = Ключ;
ПередаваемыеДанные.ИмяФайла = ИмяФайла;
ПередаваемыеДанные.ПрочитатьСодержимое = Истина;
ПередаваемыеДанные.КодироватьСодержимое = Истина;
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, НазначенияФайлов.ТелоЗапроса);
ПередаваемыйФайл.Ключ = Ключ;
ПередаваемыйФайл.ПрочитатьСодержимое = Истина;
ПередаваемыйФайл.КодироватьСодержимое = Истина;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыеДанные);
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
Иначе
ПередаваемыеДанные = КодироватьСтроку(Данные, СпособКодированияСтроки.URLВКодировкеURL);
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыеДанные);
@@ -266,10 +262,8 @@
Для Каждого ИмяФайла Из МассивДанных Цикл
ОписаниеФайла = ОписаниеПередаваемогоФайла();
ОписаниеФайла.ИмяФайла = ИмяФайла;
ОписаниеЗапроса.Файлы.Добавить(ОписаниеФайла);
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, НазначенияФайлов.ТелоЗапроса);
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
КонецЦикла;
@@ -332,14 +326,4 @@
Возврат ЕстьОпции(Команда, "d,data,data-raw,data-binary,data-urlencode,data-ascii");
КонецФункции
Функция ОписаниеПередаваемогоФайла()
ОписаниеФайла = Новый Структура();
ОписаниеФайла.Вставить("ИмяФайла", """");
ОписаниеФайла.Вставить("ПрочитатьСодержимое", Ложь);
ОписаниеФайла.Вставить("КодироватьСодержимое", Ложь);
ОписаниеФайла.Вставить("УдалятьПереводыСтрок", Ложь);
ОписаниеФайла.Вставить("Ключ", "");
Возврат ОписаниеФайла;
КонецФункции
#КонецОбласти