1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-05-18 09:51:28 +02:00

HTTP: Оптимизация chunked upload

This commit is contained in:
Anton Titovets
2026-05-11 22:39:14 +03:00
parent c8e380fd76
commit ef296b3530
2 changed files with 27 additions and 26 deletions
@@ -72,15 +72,9 @@
ПараметрыЗадания.Добавить(НормализованныеНастройки);
ПараметрыЗадания.Добавить(АдресРезультата);
Если OPI_Инструменты.ЭтоOneScript() Тогда
//@skip-check bsl-legacy-check-expression-type
Результат = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ВызватьСНастройкамиСлужебный", ПараметрыЗадания);
Иначе
ФоновоеЗадание = ФоновыеЗадания.Выполнить("OPI_РасширенныйВызов.ВызватьСНастройкамиСлужебный", ПараметрыЗадания);
Результат = Новый Структура("ФоновоеЗадание,Адрес", ФоновоеЗадание, АдресРезультата);
КонецЕсли;
// !OInt Результат = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ВызватьСНастройкамиСлужебный", ПараметрыЗадания);
ФоновоеЗадание = ФоновыеЗадания.Выполнить("OPI_РасширенныйВызов.ВызватьСНастройкамиСлужебный", ПараметрыЗадания); // !OPI
Результат = Новый Структура("ФоновоеЗадание,Адрес", ФоновоеЗадание, АдресРезультата); // !OPI
Иначе
@@ -91,6 +91,7 @@
Перем ЗапросФайлТела; // Путь к файлу с телом запроса
Перем ЗапросПотокТела; // Поток тела запроса
Перем ЗапросПотокЧтенияТела; // Поток чтения двоичных данных тела
Перем ЗапросКонтрольЧтения; // Число байт тела, которые были успешно отправлены
Перем ЗапросЗаписьДанных; // Запись данных тела запроса
Перем ЗапросЧтениеДанных; // Чтение данных тела запроса
Перем ЗапросТипДанных; // MIME тип для Content-Type
@@ -147,13 +148,14 @@
Инициализирован = Истина;
Ошибка = Ложь;
ЗапросПараметрыURL = Новый Структура;
ЗапросТело = Неопределено;
ЗапросТелоКоллекция = Новый Структура;
ЗапросЗаголовки = Новый Соответствие;
ЗапросТаймаут = 3600;
ЗапросРазмерЧасти = 5242880;
Повторов = 0;
ЗапросПараметрыURL = Новый Структура;
ЗапросТело = Неопределено;
ЗапросТелоКоллекция = Новый Структура;
ЗапросЗаголовки = Новый Соответствие;
ЗапросТаймаут = 3600;
ЗапросРазмерЧасти = 5242880;
ЗапросКонтрольЧтения = 0;
Повторов = 0;
ЗапросТипУстановленВручную = Ложь;
@@ -1510,22 +1512,21 @@
Повторов = 0;
ОбщийРазмер = ЗапросТело.Размер();
ЗапросПотокТела = ЗапросТело.ОткрытьПотокДляЧтения();
ЗапросЧтениеДанных = Новый ЧтениеДанных(ЗапросПотокТела);
ЗапросКонтрольЧтения = 0;
КБайт = 1024;
МБайт = КБайт * КБайт;
Пока ЗапросПотокТела.ТекущаяПозиция() < ОбщийРазмер Цикл
Пока ЗапросКонтрольЧтения < ОбщийРазмер Цикл
ОтправитьЧасть(ЗапросПотокТела.ТекущаяПозиция(), РазмерЧасти, Метод);
ОтправитьЧасть(ЗапросКонтрольЧтения, РазмерЧасти, Метод);
Проверка = ПроверитьЗагрузкуЧасти();
Если Проверка <> Неопределено Тогда
Возврат Проверка;
КонецЕсли;
OPI_Инструменты.ИнформацияОПрогрессе(ЗапросПотокТела.ТекущаяПозиция(), ОбщийРазмер, "МБ", МБайт);
OPI_Инструменты.ИнформацияОПрогрессе(ЗапросКонтрольЧтения, ОбщийРазмер, "МБ", МБайт);
// !OInt ВыполнитьСборкуМусора();
@@ -1561,8 +1562,13 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(Метод);
ЗапросПотокЧтенияТела = ?(ЗапросПотокЧтенияТела = Неопределено, ЗапросТело.ОткрытьПотокДляЧтения(), ЗапросПотокЧтенияТела);
ЗапросЧтениеДанных = ?(ЗапросЧтениеДанных = Неопределено, Новый ЧтениеДанных(ЗапросПотокЧтенияТела), ЗапросЧтениеДанных);
ЗапросПотокЧтенияТела = ?(ЗапросПотокЧтенияТела = Неопределено
, ЗапросТело.ОткрытьПотокДляЧтения()
, ЗапросПотокЧтенияТела);
ЗапросЧтениеДанных = ?(ЗапросЧтениеДанных = Неопределено
, Новый ЧтениеДанных(ЗапросПотокЧтенияТела)
, ЗапросЧтениеДанных);
Если Не ЗапросПотокЧтенияТела.ТекущаяПозиция() = ПозицияНачала Тогда
ЗапросПотокЧтенияТела.Перейти(ПозицияНачала, ПозицияВПотоке.Начало);
@@ -2569,14 +2575,14 @@
НеобходимоЧастей = 2;
Если МассивИнформации.Количество() = НеобходимоЧастей Тогда
ЗапросПотокЧтенияТела.Перейти(Число(МассивИнформации[1]) + 1 , ПозицияВПотоке.Начало);
ЗапросКонтрольЧтения = Число(МассивИнформации[1]) + 1;
Иначе
ЗапросПотокЧтенияТела.Перейти(ЗапросТелоТекущейОтправки.Размер(), ПозицияВПотоке.Текущая);
ЗапросКонтрольЧтения = ЗапросКонтрольЧтения + ЗапросТелоТекущейОтправки.Размер();
КонецЕсли;
Иначе
ЗапросПотокЧтенияТела.Перейти(ЗапросТелоТекущейОтправки.Размер(), ПозицияВПотоке.Текущая);
ЗапросКонтрольЧтения = ЗапросКонтрольЧтения + ЗапросТелоТекущейОтправки.Размер();
КонецЕсли;
@@ -3479,6 +3485,7 @@
ЗапросФайлТела = Неопределено;
ЗапросПотокТела = Неопределено;
ЗапросПотокЧтенияТела = Неопределено;
ЗапросКонтрольЧтения = Неопределено;
ЗапросЗаписьДанных = Неопределено;
ЗапросЧтениеДанных = Неопределено;
ЗапросТипДанных = Неопределено;