Сохранение файла из потока данных от API внешней системы
По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2
- Чтение метаданных 1С из SQL Server и PostgreSQL
- Отправка Push-уведомлений через сервис Firebase Cloud Messaging по протоколу FCM HTTP v1 API
- Пишем внешнюю компоненту для 1С, NativeAPI на С++, для ОС Linux, с использованием Qt Creator
- Система управления интеграциями на базе 1С:Шины
Найденные решения
Тут используется старый синтаксис HTTP_Соединение.Получить(АдресСкрипта, ИмяФайлаОтвета).
Лучше использовать новый:
Лучше использовать новый:
Ответ = HTTP_Соединение.Получить(АдресСкрипта);
Если Ответ.КодСостояния=200 Тогда
ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
//если возвращается текст, то можно двоичные данные преобразовать в строку:
Текст = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные,КодировкаТекста.UTF8);
// Ответ.Заголовки["Content-Type"] - поможет определить тип данных в теле ответа
КонецЕсли;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)
1. Уточнение: т.к. метод GET, то нужно использовать:
2. Как у вас выполняется http-запрос? Код в студию
3. В API написано "в виде потока", т.е. никак не JSON.
1. Уточнение: т.к. метод GET, то нужно использовать:
Ответ = HTTPСоединение.Получить(HTTPЗапрос);
ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
2. Как у вас выполняется http-запрос? Код в студию
3. В API написано "в виде потока", т.е. никак не JSON.
(5)
&НаСервере
Функция ПолучитьФайлыПоИД(МассивИД) Экспорт
Если МассивИД.Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
МассивФайлов = Новый Массив;
СтрокаФайлИД = "";
Для Каждого ФайлИД из МассивИД Цикл
СтрокаФайлИД = СтрокаФайлИД + "filter[orderIds][]=" + ФайлИД + "&";
КонецЦикла;
СтрокаФайлИД = ?(Прав(СтрокаФайлИД, 1) = "&", Лев(СтрокаФайлИД, СтрДлина(СтрокаФайлИД) - 1), СтрокаФайлИД);
ApiKey = crm_RetailCRMОбщий.ПолучитьЗначениеКонстанты("КлючCRM");
АдресСкриптаФайл = "/api/v5/files?" + СтрокаФайлИД + "&limit=100&apiKey=" + ApiKey;
ОтветФайл = ЗапросCRM(АдресСкриптаФайл);
Для Каждого Файл из ОтветФайл["files"] Цикл
АдресСкриптаЗагрузкиФайла = "/api/v5/files/" + Файл["id"] + "/download?apiKey=" + ApiKey;
ЗагрузкаФайл = ЗапросCRM(АдресСкриптаЗагрузкиФайла);
МассивФайлов.Добавить(Файл);
КонецЦикла;
Возврат МассивФайлов
КонецФункции
Показать&НаСервере
Функция ЗапросCRM(АдресСкрипта)
Сообщить("Запрос к RetailCRM ...");
ответ = crm_RetailCRMОбщий.HTTPзапросGET(crm_RetailCRMОбщий.ПолучитьЗначениеКонстанты("ИмяСервера"),АдресСкрипта);
Сообщить("Разбор ответа ...");
Возврат crm_RetailCRMОбщий.UnJSON(ответ);
КонецФункции
Функция HTTPзапросGET(АдресСервера,АдресСкрипта) Экспорт
ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
HTTP_Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl);
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
HTTP_Соединение.Получить(АдресСкрипта,ИмяФайлаОтвета);
ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
ТекстОтвета = Новый ТекстовыйДокумент();
ТекстОтвета.Прочитать(ИмяФайлаОтвета,"utf-8");
возврат ТекстОтвета.ПолучитьТекст();
КонецФункции
Показать
Тут используется старый синтаксис HTTP_Соединение.Получить(АдресСкрипта, ИмяФайлаОтвета).
Лучше использовать новый:
Лучше использовать новый:
Ответ = HTTP_Соединение.Получить(АдресСкрипта);
Если Ответ.КодСостояния=200 Тогда
ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
//если возвращается текст, то можно двоичные данные преобразовать в строку:
Текст = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные,КодировкаТекста.UTF8);
// Ответ.Заголовки["Content-Type"] - поможет определить тип данных в теле ответа
КонецЕсли;
Показать
(10)
Но ДвоичныеДанные = Неопределено, хотя в Ответ приходят данные.
Ответ
Сделал так:
Функция HTTPзапросGETfiles(АдресСервера,АдресСкрипта) Экспорт
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
HTTP_Соединение = Новый HTTPСоединение(АдресСервера,,,,,,SSL);
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
Ответ = HTTP_Соединение.Получить(АдресСкрипта);
Если Ответ.КодСостояния = 200 Тогда
ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
КонецЕсли;
Возврат ДвоичныеДанные;
КонецФункции
ПоказатьНо ДвоичныеДанные = Неопределено, хотя в Ответ приходят данные.
(17) А http-запрос где?
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
HTTP_Соединение = Новый HTTPСоединение(АдресСервера,,,,,,SSL);
Запрос = Новый HTTPЗапрос(АдресСкрипта);
Ответ = HTTP_Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
КонецЕсли;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот