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

1. serg-lom89 72 31.03.20 11:13 Сейчас в теме
Всем привет
ребята кто нить делал выгрузку файлов(картинок) в CouchDB из 1с?
что то не получается через http соединение залить туда данные
может кто сталкивался и есть пример,буду благодарен
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. noprogrammer 236 31.03.20 14:01 Сейчас в теме
(1) Что конкретно не получается?
3. noprogrammer 236 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 72 03.04.20 09:23 Сейчас в теме
(3)
спасибо за пример.
нашел чуток другое рещение помогло)
5. serg-lom89 72 03.04.20 12:58 Сейчас в теме
(3)вам спасибо за пример )
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)