Загрузка документа(картинки в couchDB)

1. serg-lom89 76 31.03.20 11:13 Сейчас в теме
Всем привет
ребята кто нить делал выгрузку файлов(картинок) в CouchDB из 1с?
что то не получается через http соединение залить туда данные
может кто сталкивался и есть пример,буду благодарен
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. noprogrammer 239 31.03.20 14:01 Сейчас в теме
(1) Что конкретно не получается?
3. noprogrammer 239 31.03.20 14:02 Сейчас в теме
(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");		
	КонецЦикла;

	Возврат Истина;
КонецФункции
Показать
serg-lom89; +1 Ответить
4. serg-lom89 76 03.04.20 09:23 Сейчас в теме
(3)
спасибо за пример.
нашел чуток другое рещение помогло)
5. serg-lom89 76 03.04.20 12:58 Сейчас в теме
(3)вам спасибо за пример )
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот