Last active
August 5, 2022 09:34
-
-
Save vyachin/7ed736a499434d77fbf93e1c7401e6bf to your computer and use it in GitHub Desktop.
Загрузка файла на сервер, средствами 1С
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
&НаСервере | |
Функция ПодключитьсяК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