В начало

Приложить файлы к заявке

 

            В базе есть справочник, в котором хранятся  файлы, прикладываемые к неким заявкам на сайте. Нужно загрузить прилагаемые файлы в справочник.

            Для авторизации на сайте используется метод «POST /login».

            Для чтения информации по заявкам используется метод «GET /api/claim/{ idЗаявки}».

 

Листинг. Параметры метода «POST /login»

Параметр

Обязательный

Описание

Параметры запроса в GET-строке

login-form-email

Да

адрес электронной почты пользователя

login-form-password

Да

пароль пользователя

Параметры заголовка ответа

JSESSIONID

 

идентификатор сессии;

mosreg-token

 

token, идентифицирующий пользователя, сгенерированный на основе данных, предоставленных при логине

 

Листинг. Параметры метода «GET /api/claim/{ idЗаявки}»

Параметр

Обязательный

Описание

Параметры заголовка запроса

Cookie

Да

В заголовке запроса должен быть передан параметр Cookie, содержащий значения JSESSIONID и mosreg-token (через точку с запятой), полученные от сервера в результате выполнения логина

Параметры GET-строки

{idЗаявки}

Да

Номер заявки

 

 

Листинг. Модуль внешней обработки

&НаСервере

Функция ПолучитьСсылкуНаЗаявку(Знач ВнешнийКод)

            Запрос = Новый Запрос;

            Запрос.Текст =

            "ВЫБРАТЬ

            |           Заявки.Ссылка КАК Ссылка

            |ИЗ

            |           Документ.Заявки КАК Заявки

            |ГДЕ

            |           Заявки.ВнешнийКод = &ВнешнийКод";

           

            Запрос.УстановитьПараметр("ВнешнийКод", ВнешнийКод);

           

            Результат = Запрос.Выполнить();  

            Выборка = Результат.Выбрать();

           

            Если Выборка.Следующий() Тогда

                        Возврат Выборка.Ссылка;

            Иначе

                        Возврат Неопределено;

            КонецЕсли;   

КонецФункции

 

Процедура ПриложитьФайлыКЗаявке(Знач idЗаявки)

            Адрес = "site.ru";               

            Соединение = Новый HTTPСоединение(Адрес, 443,,,,30, Новый ЗащищенноеСоединениеOpenSSL);  

           

            Запрос = Новый HTTPЗапрос("/login?login-form-email=" + "123" + "&login-form-password=" + "456");

           

            Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);    

           

            Если Ответ.КодСостояния = 200 Тогда

                        Куки = Ответ.Заголовки.Получить("Set-Cookie");

                        Куки = СтрЗаменить(Куки, ";", Символы.ПС);

                        Куки = СтрЗаменить(Куки, ",", Символы.ПС);

                        MosregToken = СтрПолучитьСтроку(Куки, 1);                 

                        JSessionID =  СокрЛП(СтрПолучитьСтроку(Куки, 5));

                        Cookie = JSessionID + ";" + MosregToken;

 

                        //////////////////////////////////////////////////////

                        //2-й запрос

                        Заголовки = Новый Соответствие;             

                        Заголовки.Вставить("Cookie", Cookie);

                        Запрос2 = Новый HTTPЗапрос("/api/claim/" + idЗаявки, Заголовки);

                       

                        Ответ2 = Соединение.ВызватьHTTPМетод("GET", Запрос2);   

                       

                       

                        Если Ответ2.КодСостояния = 200 Тогда

                                                          

                                   МассивФайлов = Ответ22.value.images;

                                   СсылкаНаЗаявку = ПолучитьСсылкуНаЗаявку("Префикс" +  idЗаявки);

 

                                   Для Каждого Эл Из МассивФайлов Цикл

                                              

                                               Вложение = Справочники.УК_ХранилищеДополнительнойИнформации.СоздатьЭлемент();    

                                               Вложение.УстановитьНовыйКод();

                                               Вложение.ОбменДанными.Загрузка = Истина;

                                               Вложение.Наименование = "Префикс" + idЗаявки;

                                               Вложение.Объект = СсылкаНаЗаявку;

                                               Вложение.ВидВложения = Перечисления.УКНСИ_ВидВложения.Входящее;

                                               Вложение.ВидДанных = Перечисления.УКНСИ_ВидыДополнительнойИнформацииОбъектов.Изображение;

                                               Вложение.ИмяФайла = Эл.name;

                                              

                                               ИмяФайла = КаталогВременныхФайлов() + Эл.name;

                                               КопироватьФайл(Эл.url, ИмяФайла);

                                               ДанныеФайла = Base64Значение(Base64Строка(Новый ДвоичныеДанные(ИмяФайла)));

                                               УдалитьФайлы(ИмяФайла);

                                              

                                               Вложение.Хранилище = Новый ХранилищеЗначения(Новый Картинка(ДанныеФайла), Новый СжатиеДанных());

                                               Вложение.ХранилищеРазмер = ДанныеФайла.Размер();

                                              

                                               Вложение.Записать();

                                              

                                   КонецЦикла;

                                  

                        Иначе  

                                   Сообщить("Запрос 2, ошибка: " + Ответ2.КодСостояния);

                        КонецЕсли;

                       

            Иначе

                        Сообщить("Запрос 1, ошибка " + Ответ.КодСостояния);

            КонецЕсли;

           

           

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

 

&НаКлиенте

Процедура ПрочитатьЗаявкуИПриложитьФайлы(Команда)

            idЗаявки = "345";

            ПриложитьФайлыКЗаявке(idЗаявки);

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