|
Передача файла и параметров методом POST | ☑ | ||
---|---|---|---|---|
0
Кицум
15.07.21
✎
15:06
|
Добрый день!
Есть стороннее API с нужным мне методом для загрузки PDF файла + некоторые параметры. Формирую запрос в POSTMANe - все хорошо: я просто перечисляю список необходимых параметров в body, один параметр делаю файлом и загружаю туда нужный файл. Как подобное реализовать в 1С 8.3? Использовал конструкцию АдресСтраницы = "/api/explorer/file"; Сервер= "new.хххх.kz"; // имяФайлаДанных = "C:\qwe.pdf"; имяФайлаОтправки = ПолучитьимяВременногоФайла("txt"); Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки); // параметр "json" ЗаписьТекста.ЗаписатьСтроку("--"+boundary); ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""json"""); ЗаписьТекста.ЗаписатьСтроку(""); ЗаписьТекста.ЗаписатьСтроку("{}"); // параметр "type" ЗаписьТекста.ЗаписатьСтроку("--"+boundary); ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""type"""); ЗаписьТекста.ЗаписатьСтроку(""); ЗаписьТекста.ЗаписатьСтроку("File1c"); // параметр "parent_uuid" ЗаписьТекста.ЗаписатьСтроку("--"+boundary); ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""parent_uuid"""); ЗаписьТекста.ЗаписатьСтроку(""); ЗаписьТекста.ЗаписатьСтроку("93bd929f-6ec3-4888-bd6b-3964aff2e9a4"); // параметр "file" ЗаписьТекста.ЗаписатьСтроку("--"+boundary); ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""qwe.pdf"""); ЗаписьТекста.ЗаписатьСтроку("Content-Type: application/pdf"); ЗаписьТекста.ЗаписатьСтроку(""); ЗаписьТекста.Записать(Новый ДвоичныеДанные(имяФайлаДанных)); ЗаписьТекста.ЗаписатьСтроку(""); // параметр "name" ЗаписьТекста.ЗаписатьСтроку("--"+boundary); ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""name"""); ЗаписьТекста.ЗаписатьСтроку(""); ЗаписьТекста.ЗаписатьСтроку("Test123"); // закроем разделитель ЗаписьТекста.ЗаписатьСтроку("--"+boundary+"--"); ЗаписьТекста.Закрыть(); ФайлОтправки = Новый Файл(имяФайлаОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); // заголовки Заголовки = Новый Соответствие(); Заголовки.Вставить("Authorization", "Bearer "+ МойТокен); Заголовки.Вставить("Content-Type", "multipart/form-data, boundary="+boundary); Заголовки.Вставить("Accept", "application/json"); Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки); Заголовки.Вставить("workspace-id", "52185"); имяВыходногоФайла = ПолучитьИмяВременногоФайла("txt"); ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницы, Заголовки); ЗапросHTTP.УстановитьИмяФайлаТела(имяФайлаОтправки); Соединение = Новый HTTPСоединение(Хост,443,,,,,Новый ЗащищенноеСоединениеOpenSSL()); Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP); Но в ответ получаю 422 - не может сервер распознать файл. |
|||
2
Garykom
гуру
15.07.21
✎
15:15
|
(0) наймите программиста
|
|||
3
Мультук
гуру
15.07.21
✎
15:30
|
(0) Возьми готовую библиотеку
https://github.com/vbondarevsky/Connector |
|||
4
Garykom
гуру
15.07.21
✎
15:37
|
(3) в ней еще разобраться надо и допилить, там недоделок куча, например не все коды ответов
|
|||
5
BeerHelpsMeWin
15.07.21
✎
15:42
|
(0) (1) запахло рекламой
|
|||
6
Kassern
15.07.21
✎
15:49
|
(5) так же показалось
|
|||
7
Кицум
16.07.21
✎
10:15
|
нашел решение Хелп! выгрузка файла POST запросом
работающий код в моем случае будет: ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt"; ИмяФайлаДляЗагрузки = "C:\qwe.pdf"; Сервер = "new.хххх.kz"; Подключение = Новый Структура ("HTTP, ЗаголовокHTTP, Адрес" ); Подключение.Адрес = "/api/explorer/file"; HTTP = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL); Boundary = Строка(Новый УникальныйИдентификатор()); //Определяем массив для процедуры ОбъединитьФайлы МассивФайловДляОбъединения = Новый Массив; //Формируем начальный фрагмент файла POST-запроса ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt"); ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь); //Определяем раздел двоичных данных // параметр "json" ФайлОтправкиНачало.ЗаписатьСтроку("--"+boundary); ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""json"""); ФайлОтправкиНачало.ЗаписатьСтроку(""); ФайлОтправкиНачало.ЗаписатьСтроку("{}"); // параметр "type" ФайлОтправкиНачало.ЗаписатьСтроку("--"+boundary); ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""type"""); ФайлОтправкиНачало.ЗаписатьСтроку(""); ФайлОтправкиНачало.ЗаписатьСтроку("File1c"); // параметр "parent_uuid" ФайлОтправкиНачало.ЗаписатьСтроку("--"+boundary); ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""parent_uuid"""); ФайлОтправкиНачало.ЗаписатьСтроку(""); ФайлОтправкиНачало.ЗаписатьСтроку("93bd929f-6ec3-4888-bd6b-3964aff2e9a4"); // параметр "name" ФайлОтправкиНачало.ЗаписатьСтроку("--"+boundary); ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""name"""); ФайлОтправкиНачало.ЗаписатьСтроку(""); ФайлОтправкиНачало.ЗаписатьСтроку("Test123"); ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary); //Указываем имя файла для передачи ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайлаДляЗагрузки + """"); //Указываем тип передаваемых данных. ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: application/x-octet-stream"); ФайлОтправкиНачало.ЗаписатьСтроку(""); ФайлОтправкиНачало.Закрыть(); МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало); //Копируем файл для загрузки во временный и добавляем в массив файлов для объединения ИмяФайлаДляЗагрузкиВременный = ПолучитьИмяВременногоФайла("tmp"); КопироватьФайл(ИмяФайлаДляЗагрузки, ИмяФайлаДляЗагрузкиВременный); МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременный); //Формируем конечный фрагмент файла POST-запроса ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt"); ФайлОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.ANSI, Символы.ПС, Ложь); //Завершение раздела двоичных данных ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--"); ФайлОтправкиКонец.Закрыть(); МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец); //Теперь сформированные фрагменты сообщения для сервера объединяем в один файл POST-запроса ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки); Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); Заголовки.Вставить("Authorization", "Bearer "+ МойТокен); Заголовки.Вставить("Accept", "application/json"); Заголовки.Вставить("workspace-id", "52185"); HHTPЗапрос = Новый HTTPЗапрос(Подключение.Адрес, Заголовки); HHTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки); HTTPОтвет = HTTP.ОтправитьДляОбработки(HHTPЗапрос); ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(); Сообщить(ТекстОтвета); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |