В начало

Загрузка PDF-файла

 

            Нужно загрузить PDF-файл в ответ заявки.

 

Описание метода отправки файла “POST /api/file

Параметр

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

Примечание

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

Cookie

Да

JSessionID + ";" + MosregToken

Content-Type

Да

multipart/form-data; boundary={…}

Параметры тела HTTP-запроса

qquuid

Да

УИД

qqfilename

Да

Имя файла (непонятно какое, видимо неважно)

qqfile

Да

Двоичные данные загружаемого файла (в формате Base64, по крайней мере для PDF-файлов)

 

Листинг. Модуль формы

&НаСервере

Процедура ЗагрузкаPdfФайлаНаСервере()

            Авт = Авторизация("123", "456");//Функция авторизации на сайте

           

            qquuid = Новый УникальныйИдентификатор;

            qqfilename = "C:\ТЕМП\Тестовый файл.pdf";

            qqfile = Новый ДвоичныеДанные(qqfilename);

           

            Загр = ЗагрузкаФайлаЛайт(Авт.Соединение, Авт.Cookie, qquuid, qqfilename, qqfile);

           

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

 

&НаКлиенте

Процедура ЗагрузкаPdfФайла(Команда)

            ЗагрузкаPdfФайлаНаСервере();

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

 

&НаСервере

Функция ЗагрузкаФайлаЛайт(Знач Соединение, Знач Cookie, Знач qquuid, Знач qqfilename, Знач qqfile)

            Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");

           

            //Тело запроса запроса                    

            Тело = Новый ПотокВПамяти();

           

            ЗаписьДанных = Новый ЗаписьДанных(Тело);

           

            ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);

            ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=qquuid");

            ЗаписьДанных.ЗаписатьСтроку("");

            ЗаписьДанных.ЗаписатьСтроку(Строка(qquuid));

           

            //Параметр "qqfilename"      

            ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);

            ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=qqfilename");

            ЗаписьДанных.ЗаписатьСтроку("");

            ЗаписьДанных.ЗаписатьСтроку(ПолучитьКороткоеИмяФайла(qqfilename));

           

           

            //Параметр "qqfile" 

            ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);

            ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=qqfile; filename=""" + ПолучитьКороткоеИмяФайла(qqfilename) + """");

            ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");

            ЗаписьДанных.ЗаписатьСтроку("");

            ЗаписьДанных.ЗаписатьСтроку(Base64Строка(qqfile));

           

            ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");

            ЗаписьДанных.Закрыть();

           

            ТелоЗапроса = Тело.ЗакрытьИПолучитьДвоичныеДанные();

           

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

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

            Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);

 

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

           

            Запрос2.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);

           

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

           

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

                       

                        ЧтениеJSON = Новый ЧтениеJSON();

                        ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));

                        Ответ22 = ПрочитатьJSON(ЧтениеJSON);

                        ЧтениеJSON.Закрыть();

                       

                        Для Каждого Эл Из Ответ22 Цикл

                        Сообщить(Эл.Ключ + " " + ?(Эл.Значение <> Неопределено, Эл.Значение, "Неопределено"));

                        КонецЦикла;

                       

                        Возврат qquuid;

            Иначе  

                        Сообщить(Ответ.КодСостояния);

                        Возврат "";

            КонецЕсли;

           

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

 

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

 

 

Рис. Пример тела запроса

 

Рис. Ответ при успешном запросе

 


Рейтинг@Mail.ru