mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-03-29 21:57:16 +02:00
PXY: Обработка Multipart
This commit is contained in:
parent
fdf24eb9e3
commit
7af6951b79
@ -1197,8 +1197,16 @@
|
||||
ЧтениеЧасти = Новый ЧтениеДанных(Поток);
|
||||
|
||||
ЗаголовкиЧасти = ПрочитатьЗаголовки(ЧтениеЧасти);
|
||||
ИмяЧасти = ПолучитьИмяСообщения(ЗаголовкиЧасти);
|
||||
ДанныеЧасти = ПолучитьИмяСообщения(ЗаголовкиЧасти);
|
||||
|
||||
ИмяЧасти = ДанныеЧасти["name"];
|
||||
ИмяФайла = ДанныеЧасти["filename"];
|
||||
|
||||
ТекущиеДанные = ЧтениеЧасти.Прочитать().ПолучитьДвоичныеДанные();
|
||||
|
||||
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
|
||||
ТекущиеДанные = ПолучитьСтрокуИзДвоичныхДанных(ТекущиеДанные);
|
||||
КонецЕсли;
|
||||
|
||||
СоответствиеДанных.Вставить(ИмяЧасти, ТекущиеДанные);
|
||||
|
||||
@ -1272,8 +1280,9 @@
|
||||
|
||||
Функция ПолучитьИмяСообщения(Заголовки)
|
||||
|
||||
ТекстИсключения = "Content-Disposition одной из частей не найден или имеет неверный формат!";
|
||||
Описание = Заголовки.Получить("Content-Disposition");
|
||||
ТекстИсключения = "Content-Disposition одной из частей не найден или имеет неверный формат!";
|
||||
Описание = Заголовки.Получить("Content-Disposition");
|
||||
СтруктураВозврата = Новый Структура("name,filename");
|
||||
|
||||
Если Не ЗначениеЗаполнено(Описание) Тогда
|
||||
ВызватьИсключение ТекстИсключения;
|
||||
@ -1286,20 +1295,26 @@
|
||||
|
||||
Части = СтрРазделить(Свойство, "=", Ложь);
|
||||
ИмяСвойства = СокрЛП(Части[0]);
|
||||
ИмяСвойства = нРег(ИмяСвойства);
|
||||
|
||||
Если ИмяСвойства <> "name" И ИмяСвойства <> "Name" Тогда
|
||||
Продолжить;
|
||||
Если ИмяСвойства = "name" Тогда
|
||||
|
||||
СтруктураВозврата["name"] = СокрЛП(Части[1]);
|
||||
|
||||
ИначеЕсли ИмяСвойства = "filename"Тогда
|
||||
|
||||
СтруктураВозврата["filename"] = СокрЛП(Части[1]);
|
||||
|
||||
Иначе
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Имя = СокрЛП(Части[1]);
|
||||
Прервать;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Имя) Тогда
|
||||
Если Не ЗначениеЗаполнено(СтруктураВозврата["name"]) Тогда
|
||||
ВызватьИсключение ТекстИсключения;
|
||||
Иначе
|
||||
Возврат Имя;
|
||||
Возврат СтруктураВозврата;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
@ -40,6 +40,8 @@
|
||||
//@skip-check module-accessibility-at-client
|
||||
//@skip-check object-module-export-variable
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОписаниеПеременных
|
||||
|
||||
Перем ПутьПроекта Экспорт;
|
||||
@ -52,7 +54,6 @@
|
||||
|
||||
Процедура ОсновнаяОбработка(Контекст, СледующийОбработчик) Экспорт
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
Попытка
|
||||
Результат = ОбработатьЗапрос(Контекст);
|
||||
@ -71,10 +72,6 @@
|
||||
Контекст.Ответ.ТипКонтента = "application/json;charset=UTF8";
|
||||
Контекст.Ответ.Записать(JSON);
|
||||
|
||||
#Иначе
|
||||
ВызватьИсключение "Метод недоступен на клиенте!";
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОбработатьЗапрос(Контекст)
|
||||
@ -122,6 +119,10 @@
|
||||
ИначеЕсли МетодОбработчика = "POST" Тогда
|
||||
|
||||
Результат = ВыполнитьОбработкуPost(Контекст, Обработчик);
|
||||
|
||||
ИначеЕсли МетодОбработчика = "MULTIPART" Тогда
|
||||
|
||||
Результат = ВыполнитьОбработкуMultipart(Контекст, Обработчик);
|
||||
|
||||
Иначе
|
||||
|
||||
@ -157,13 +158,50 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьОбработкуMultipart(Контекст, Обработчик)
|
||||
|
||||
Запрос = Контекст.Запрос;
|
||||
|
||||
Тело = Запрос.Тело;
|
||||
Заголовки = Запрос.Заголовки;
|
||||
|
||||
Параметры = OPI_Инструменты.РазобратьMultipart(Тело, Заголовки);
|
||||
|
||||
Возврат ВыполнитьУниверсальнуюОбработку(Контекст, Обработчик, Параметры);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьУниверсальнуюОбработку(Контекст, Обработчик, Параметры)
|
||||
|
||||
Аргументы = Обработчик["args"];
|
||||
Команда = Обработчик["library"];
|
||||
Метод = Обработчик["function"];
|
||||
|
||||
МассивВФ = Новый Массив;
|
||||
КотелПараметров = СформироватьКотелПараметров(Аргументы, Параметры);
|
||||
|
||||
Для Каждого Параметр Из КотелПараметров Цикл
|
||||
|
||||
ТекущееЗначение = Параметр.Значение;
|
||||
ТекущийКлюч = Параметр.Ключ;
|
||||
|
||||
Если ТипЗнч(ТекущееЗначение) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
//@skip-check missing-temporary-file-deletion
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
ТекущееЗначение.Записать(ИВФ);
|
||||
|
||||
МассивВФ.Добавить(ИВФ);
|
||||
|
||||
КотелПараметров.Вставить(ТекущийКлюч, ИВФ);
|
||||
|
||||
Иначе
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущееЗначение);
|
||||
КотелПараметров.Вставить(ТекущееЗначение, ИВФ);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
СтруктураВыполнения = ОбъектОПИ.СформироватьСтрокуВызоваМетода(КотелПараметров, Команда, Метод);
|
||||
|
||||
Ответ = Неопределено;
|
||||
@ -180,6 +218,16 @@
|
||||
Ответ = Новый Структура("result,data", Истина, Ответ);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Для Каждого ВременныйФайл Из МассивВФ Цикл
|
||||
УдалитьФайлы(ВременныйФайл);
|
||||
КонецЦикла;
|
||||
|
||||
Исключение
|
||||
Сообщить("Не удалось удалить временные файлы!");
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
@ -210,8 +258,11 @@
|
||||
Для Каждого Параметр Из Параметры Цикл
|
||||
|
||||
Значение = Параметр.Значение;
|
||||
Значение = ?(СтрНачинаетсяС(Значение , """"), Прав(Значение, СтрДлина(Значение) - 1), Значение);
|
||||
Значение = ?(СтрЗаканчиваетсяНа(Значение, """"), Лев(Значение , СтрДлина(Значение) - 1), Значение);
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||
Значение = ?(СтрНачинаетсяС(Значение , """"), Прав(Значение, СтрДлина(Значение) - 1), Значение);
|
||||
Значение = ?(СтрЗаканчиваетсяНа(Значение, """"), Лев(Значение , СтрДлина(Значение) - 1), Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КотелПараметров.Вставить("--" + Параметр.Ключ, Значение);
|
||||
|
||||
@ -234,3 +285,7 @@
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Иначе
|
||||
ВызватьИсключение "Объект недоступен на клиенте!";
|
||||
#КонецЕсли
|
||||
|
Loading…
x
Reference in New Issue
Block a user