Skip to content

Instantly share code, notes, and snippets.

@vyachin
Last active August 5, 2022 09:34
Show Gist options
  • Save vyachin/7ed736a499434d77fbf93e1c7401e6bf to your computer and use it in GitHub Desktop.
Save vyachin/7ed736a499434d77fbf93e1c7401e6bf to your computer and use it in GitHub Desktop.
Загрузка файла на сервер, средствами 1С
&НаСервере
Функция ПодключитьсяКHTTPСерверу(Организация) Экспорт
Результат = ПолучитьДанныеПодключения(Организация, Перечисления.РИТ_ВидПодключения.HTTP);
Если Результат.Порт = "" Тогда
Порт = 0;
Иначе
Порт = Число(Результат.Порт);
КонецЕсли;
ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
HTTP = Новый HTTPСоединение(
Результат.Адрес,
Порт
,
,
,
,
0,
ssl);
Возврат HTTP;
КонецФункции
&НаСервере
Функция ПолучитьЗапросHTTP(Организация, АдресРесурса) Экспорт
Результат = ПолучитьДанныеПодключения(Организация, Перечисления.РИТ_ВидПодключения.HTTP);
ЛогинПароль = Результат.Логин + ":" + Результат.Пароль;
СтрокаBase64 = Base64(ЛогинПароль);
ЗаголовокЗапросаHTTP = Новый Соответствие();
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json;charset=utf-8");
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Basic " + СтрокаBase64);
ЗаголовокЗапросаHTTP.Вставить("Accept", "application/json");
ЗаголовокЗапросаHTTP.Вставить("Connection", "Keep-Alive");
ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, ЗаголовокЗапросаHTTP);
Возврат ЗапросHTTP;
КонецФункции
&НаСервере
Процедура ВыгрузитьСчетНаОплату(ЗаказКлиента)
АдресРесурса = "***";
НомерДок = СокрЛП(ЗаказКлиента.Номер);
ИмяФайлаДок = "Bill_" + НомерДок + ".pdf";
Если НайтиПрисоединенныеФайлы(ЗаказКлиента, ИмяФайлаДок, "pdf") Тогда
Сообщить("Документ " + ИмяФайлаДок + ".pdf, уже прикреплен к заказу! Отправка запрещена!");
Возврат;
КонецЕсли;
МассивОбъектов = новый Массив();
массивОбъектов.Добавить(ЗаказКлиента);
СтруктураТипов = новый Соответствие();
СтруктураТипов.Вставить("Документ.ЗаказКлиента", МассивОбъектов);
СписокОбъектов = новый СписокЗначений();
ТД = обработки.ПечатьСчетовНаОплату.СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, СписокОбъектов, Неопределено);
МассивФайлов = Новый Массив;
ФайлДанных = КаталогВременныхФайлов() + ИмяФайлаДок;
ТД.записать(ФайлДанных, ТипФайлаТабличногоДокумента.pdf);
ИмяФайлаСПараметрами = ПолучитьимяВременногоФайла("txt");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаСПараметрами, КодировкаТекста.ANSI);
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
ЗаписьТекста.ЗаписатьСтроку("--" + Boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайлаДок + """");
ЗаписьТекста.ЗаписатьСтроку("Content-Type: application/pdf");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.Закрыть();
МассивФайлов.Добавить(ИмяФайлаСПараметрами);
МассивФайлов.Добавить(ФайлДанных);
ИмяФайлаСПараметрами = ПолучитьимяВременногоФайла("txt");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаСПараметрами, КодировкаТекста.ANSI);
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку("--" + Boundary + "--");
ЗаписьТекста.Закрыть();
МассивФайлов.Добавить(ИмяФайлаСПараметрами);
ИмяФайлаОтправки = ПолучитьимяВременногоФайла("txt");
ОбъединитьФайлы(МассивФайлов, ИмяФайлаОтправки);
ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ПараметрыЗапроса = ПолучитьДанныеПодключения(ЗаказКлиента.Организация, Перечисления.РИТ_ВидПодключения.HTTP);
ЛогинПароль = ПараметрыЗапроса.Логин + ":" + ПараметрыЗапроса.Пароль;
СтрокаBase64 = Base64(ЛогинПароль);
Заголовки = Новый Соответствие();
Заголовки.Вставить("Authorization", "Basic " + СтрокаBase64);
Заголовки.Вставить("Accept", "application/json");
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);
Запрос = Новый HTTPЗапрос(АдресРесурса + ЗаказКлиента._ИдентификаторЗаказа + "***", Заголовки);
Запрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
Попытка
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ФайлДанных);
УИД = Новый УникальныйИдентификатор();
АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, УИД);
UTC = УниверсальноеВремя(ТекущаяДата());
Параметры = Новый Структура();
Параметры.Вставить("Автор", ПользователиКлиентСервер.ТекущийПользователь());
Параметры.Вставить("ВладелецФайлов", ЗаказКлиента);
Параметры.Вставить("ИмяБезРасширения", ИмяФайлаДок);
Параметры.Вставить("РасширениеБезТочки", "pdf");
Параметры.Вставить("ВремяИзмененияУниверсальное", UTC);
РаботаСФайлами.ДобавитьФайл(Параметры,АдресВХранилище,,,);
АдресРесурса = "***";
СоединениеHTTP = ПодключитьсяКHTTPСерверу(ЗаказКлиента.Организация);
РезультатОбщий = СоединениеHTTP.ОтправитьДляОбработки(Запрос);
УдалитьФайлы(ФайлДанных);
Для Каждого ЗаписьМассива из МассивФайлов Цикл
УдалитьФайлы(ЗаписьМассива);
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment