REST API multipart/form-data или отправка файлов в nexus

28.02.20

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Понадобилось в nexus складывать файлы для автодеплоя. Для этого использовал onescript и rest api. Библиотека 1connector не отработала, примеры на зазеркалье и ИТС тоже. В этой статье расскажу как поборол проблему.

По REST API много документации и проблем при работе с ним не ожидалось.
Но при попытке отправить в нексус файл получал ошибки.
Пробовал компоненту "1connector",
статьи
https://its.1c.ru/db/metod8dev/content/5917/hdoc
https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/
и поисковики.

Вики дает неполное описание формата https://ru.wikipedia.org/wiki/Multipart/form-data.
Добирал описание на разных ресурсах.

Требования к формату "multipart/form-data"

1. определить нужные заголовки запроса
2. правильно описать тело запроса

Заголовки запроса

Сначала идет разделитель состоящий из букв и цифр.
Потом длина тела сообщения.

Пример:

ТипКонтента = СтрШаблон("multipart/form-data; boundary=%1", Разделитель); 
HTTPЗапрос.Заголовки.Вставить("Content-Type", ТипКонтента);
HTTPЗапрос.Заголовки.Вставить("Content-length", РазмерСодержимого);

Описание тела запроса

Сначала открывается сообщение "--Разделитель"
Потом описываются переменные и их значения
При необходимости добавить другие переменные указываем еще один разделитель и описываем их.
Для закрытия сообщения указываем "--Разделитель--"
Обращаем внимание: для закрытия сообщения после разделителя указывается "--".

Пример:

--Разделитель
Content-Disposition: form-data; name=""Имя переменной"""
Пустая строка
Значение переменной
--Разделитель
Content-Disposition: form-data; name=""Имя переменной"""
Пустая строка
Значение переменной
--Разделитель--
 

Как проверить

Для проверки корректного разделения можно посмотреть в фидлере как отработало разделение.

 

Образец кода

Работает как в OneScript версии 1.2 и выше так и в 1С 8.3.14
На вход подается адрес репозитория, полный путь к файлу.
Код не полный и предоставляется для ознакомления только отправка.

Процедура ОтправитьФайлВНексус(АдресРепозитория, ПолноеИмяФайла)
	
	Отладка = Истина;
	
	Если Отладка Тогда
		Сообщить("ПолноеИмяФайла " + ПолноеИмяФайла);
	КонецЕсли;
	
	СтруктураURI = СтруктураURI(АдресРепозитория);
	
	Логин = "---";
	Пароль = "---";
	
	Соединение = Новый HTTPСоединение(СтруктураURI.Хост, , Логин, Пароль, , 1200);
	
	ЗаголовокЗапросаHTTP = Новый Соответствие();
	ЗаголовокЗапросаHTTP.Вставить("User-Agent", "1C+Enterprise/8.3");
	
	ЗапросHTTP = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере, ЗаголовокЗапросаHTTP);
	ЗакодироватьФайлы(ЗапросHTTP, ПолноеИмяФайла);
	
	Ответ = Соединение.ВызватьHTTPМетод("POST", ЗапросHTTP);
	СообщениеОтвет = Ответ.ПолучитьТелоКакСтроку();
	
	ОписаниеОтвета = "" + Ответ.КодСостояния + " " + СообщениеОтвет;
	
	Если НЕ (Ответ.КодСостояния = 200 или Ответ.КодСостояния = 204) Тогда
		ВызватьИсключение ОписаниеОтвета;
	КонецЕсли;

КонецПроцедуры

Процедура ЗакодироватьФайлы(HTTPЗапрос, ПолноеИмяФайла)

	Разделитель = СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
	РазделительСтрок = Символы.ВК + Символы.ПС;
	
	Файл = Новый Файл(ПолноеИмяФайла);
	Если НЕ Файл.Существует() Тогда
		ВызватьИсключение "Не найден файл " + ПолноеИмяФайла + " для отправки в нексус";
	КонецЕсли;
	РазмерФайла = Файл.Размер();
	
	БуферДвоичныхДанных = Новый БуферДвоичныхДанных(РазмерФайла);
	
	ФайловыйПоток = Новый ФайловыйПоток(Файл.ПолноеИмя, РежимОткрытияФайла.Открыть);
	ФайловыйПоток.Прочитать(БуферДвоичныхДанных, 0, РазмерФайла);
	ФайловыйПоток.Закрыть();
	
	ПотокТело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
	
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""raw.directory""");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("oneclog");
	ЗаписьДанных.ЗаписатьСтроку("");
	
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""raw.asset1.filename""");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку(Файл.ИмяБезРасширения + Файл.Расширение);
	ЗаписьДанных.ЗаписатьСтроку("");
	
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/x-executable");
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""raw.asset1""");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(БуферДвоичныхДанных);
	ЗаписьДанных.ЗаписатьСтроку("");
	
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
	
	РазмерСодержимого = XMLСтрока(ПотокТело.Размер());
	ЗаписьДанных.Закрыть();
	
	ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
	
	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело);
	
	ТипКонтента = СтрШаблон("multipart/form-data; boundary=%1", Разделитель);
	
	HTTPЗапрос.Заголовки.Вставить("Content-Type", ТипКонтента);
	HTTPЗапрос.Заголовки.Вставить("Content-length", РазмерСодержимого);
	
КонецПроцедуры

 

См. также

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    144083    834    297    

432

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.20.x), также подходят для релиза 11.5 (11.5.19.x).

35000 руб.

23.07.2020    54381    239    73    

195

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    73262    193    152    

129

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    37662    102    68    

98

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.240.x) и БП 3.0 (3.0.169.x). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    25279    176    52    

134

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    172451    309    259    

385

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    196373    156    244    

285

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.240.x), ERP 2.5 (2.5.20.x), КА 2.5 (2.5.20.x), также подходят для релиза ERP 2.5 (2.5.19.x), КА 2.5 (2.5.19.x).

35000 руб.

24.06.2020    64381    80    27    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bonv 1571 29.02.20 13:42 Сейчас в теме
(0)
Пробовал компоненту "1connector",

Можно увидеть пример вызова, который не сработал как надо?
И версию 1connector и 1Script?
2. pashamak 349 01.03.20 15:47 Сейчас в теме
(1)Примера уже нет. Была проблема с заданием имени переменной содержащей точку, например raw.directory.
Оставьте свое сообщение