Загрузка документа(картинки в couchDB)
По теме из базы знаний
- Конфигурация Flowcon: Набор инструментов для управления задачами, проектами и бизнесом в 1С
- Система взаимодействия - расширение для конфигурации "INFOSTART ERP community edition" и "СКАТ-Профессионал"
- Новая система хранения в Simple UI. Это все меняет.
- Пакет обновление Simple UI Август 2021. Новый формат и новые возможности.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Функция ЗаписатьCouchDB(Ссылка, МассивФайлов) Экспорт
Соединение=CouchDB.СоединениеHTTP(ВложенияПовИсп.ПараметрыПодключения());
Если Соединение=Неопределено Тогда Возврат Ложь; КонецЕсли;
ИмяБазы=ВложенияСервер.ИмяБазы();
Если НЕ CouchDB.БазаСуществует(ИмяБазы, Соединение) Тогда Возврат Ложь; КонецЕсли;
//************** Отправим вложения в couchDB из 1С **************
ID=Ссылка.УникальныйИдентификатор();
//Прочитаем документ (владелец вложения), если его еще нет то создадим
Запрос=Новый HTTPЗапрос(ИмяБазы+"/"+ID);
Запрос.Заголовки.Вставить("Content-type", "application/json");
Ответ=Соединение.ВызватьHTTPМетод("GET", Запрос);
Если Ответ.КодСостояния > 200 Тогда //Документ еще не существует
Запрос=Новый HTTPЗапрос(ИмяБазы);
Запрос.Заголовки.Вставить("Content-type", "application/json");
Запрос.УстановитьТелоИзСтроки("{""_id"": """+ID+"""}", КодировкаТекста.UTF8);
Ответ=Соединение.ВызватьHTTPМетод("POST", Запрос);
Если Ответ.КодСостояния > 201 Тогда
CouchDB_Сервер.ЗаписатьОшибку(ИмяБазы, "Создание документа для вложения в базе CouchDB", Ответ.ПолучитьТелоКакСтроку(), Истина);
Возврат Ложь;
КонецЕсли; // не удалось создать документ
Данные=CouchDB.ПрочитатьОтвет(Ответ);
Если НЕ ТипЗнч(Данные)=Тип("Соответствие") Тогда
CouchDB_Сервер.ЗаписатьОшибку(ИмяБазы, "Ошибка чтения ответа cоздание документа для вложения в базе CouchDB", "Не верный формат ответа", Истина);
Возврат Ложь;
КонецЕсли; //Ошибка...
REV=Данные.Получить("rev"); //если документ (вложение) только, что создали то его версию получим так
Иначе
REV=CouchDB.REV(Ответ); //если документ (вложение) существует то его версию получим так
КонецЕсли;
//Отправим файлы в базу CouchDB
Для каждого СтрокаКоллекции Из МассивФайлов Цикл
Если ТипЗнч(МассивФайлов)=Тип("Массив") Тогда
Файл=Новый Файл(СтрокаКоллекции);
Если НЕ Файл.Существует() Тогда
CouchDB_Сервер.ЗаписатьОшибку(ИмяБазы, "Отправка вложения", "Файл <"+СтрокаКоллекции+"> отсутствует", Истина);
Продолжить;
КонецЕсли;
ИмяФайла=Файл.Имя;
РасширениеФайла=Файл.Расширение;
ДвочиныеДанные=Новый ДвоичныеДанные(СтрокаКоллекции);
ИначеЕсли ТипЗнч(МассивФайлов)=Тип("Соответствие") Тогда
ПараметрыФайла=СтрРазделить(СтрокаКоллекции.Ключ, ".");
ИмяФайла=СтрокаКоллекции.Ключ; //*** ПараметрыФайла[0];
РасширениеФайла=ПараметрыФайла[1];
ДвочиныеДанные=СтрокаКоллекции.Значение;
КонецЕсли;
Запрос=Новый HTTPЗапрос(ИмяБазы+"/"+ID+"/"+ИмяФайла);
Запрос.Заголовки.Вставить("Content-type", CouchDB.ContentType(РасширениеФайла));
Запрос.Заголовки.Вставить("If-Match", REV);
Запрос.УстановитьТелоИзДвоичныхДанных(ДвочиныеДанные);
Ответ=Соединение.ВызватьHTTPМетод("PUT", Запрос); //Ответ=Соединение.Записать(Запрос);
Если Ответ.КодСостояния > 201 Тогда
CouchDB_Сервер.ЗаписатьОшибку(ИмяБазы, "Отправка вложения в базу Couch DB", Ответ.ПолучитьТелоКакСтроку());
Продолжить;
КонецЕсли;
Данные=CouchDB.ПрочитатьОтвет(Ответ);
Если НЕ ТипЗнч(Данные)=Тип("Соответствие") Тогда
CouchDB_Сервер.ЗаписатьОшибку(ИмяБазы, "Отправка вложения в базу CouchDB", "Не верный формат ответа", Истина);
Возврат Ложь;
КонецЕсли; //Ошибка...продолжать бесполезно...
REV=Данные.Получить("rev");
КонецЦикла;
Возврат Истина;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот