Как в данном коде заменить временное хранилище? Была попытка через Новый Картинка(<ДвоичныеДанные>), но почему-то не получается
С помощью почты получаю картинку
#Область РаботаСКартинкой
&НаКлиенте
Процедура АдресКартинкиНажатие(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ОписаниеНажатиеЗавершение",ЭтотОбъект);
НачатьПомещениеФайла(Оповещение,,,Истина, УникальныйИдентификатор);
СтандартнаяОбработка=Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ОписаниеНажатиеЗавершение(Результат, Адрес, ПомещаемыйФайл, ДополнительныеПараметры) Экспорт
Если не Результат Тогда
Возврат;
КонецЕсли;
АдресКартинки=Адрес;
Модифицированность=Истина;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьКартинку(ТемаКартинки,АйДи) Экспорт
СтруктуруЗапроса = СформироватьСтруктуруЗапроса();
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ОтправитьЗапросGETКартинку(СтрокаДляТела,АйДи);
Возврат Base64Значение(Результат.Получить("response").Получить("image"));
КонецФункции
#КонецОбласти
#Область HTTP
&НаКлиенте
Функция ОтправитьЗапросGETКартинку(СтрокаДляТела,АйДи) //получаем картинку GET запросом
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTP = Новый HTTPСоединение("",443,,,,,SSL); //лямка
ЗаголовокЗапросаHTTP = Новый Соответствие();
Токен=ПолучитьТокенНаСервере();
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer " + Токен);
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");
ЗапросHTTP = Новый HTTPЗапрос("operations/"+АйДи, ЗаголовокЗапросаHTTP);
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаДляТела);
ОтветHTTP = HTTP.Получить(ЗапросHTTP);
JSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат = РаботаСHTTP.ДесериализоватьJSON(JSON, Истина);
Возврат Результат;
КонецФункции
&НаКлиенте
Функция СформироватьСтруктуруЗапроса()
//modelUri артИКУЛ:// модель с папкой / я артИКУЛ / latest
СтруктуруЗапроса = Новый Структура("modelUri", modelUri);
Возврат СтруктуруЗапроса;
КонецФункции
&НаКлиенте
Функция ПолучитьАйДиКартинки(ТемаКартинки) Экспорт //получаем ID картинки
СтруктуруЗапроса = СформироватьСтруктуруЗапросаАйДи(ТемаКартинки);
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ПослатьЗапросАйДи(СтрокаДляТела);
Возврат Результат.id;
КонецФункции
&НаКлиенте
Функция СформироватьСтруктуруЗапросаАйДи(ТемаКартинки)
//modelUri артИКУЛ:// модель с папкой / я артИКУЛ / latest
completionOptions = Новый Структура();
completionOptions.Вставить("seed", "1863");
completionOptions2 = Новый Структура();
completionOptions2.Вставить("widthRatio", "2");
completionOptions2.Вставить("heightRatio", "1");
completionOptions.Вставить("aspectRatio",completionOptions2);
messages = Новый Массив;
System = Новый Структура;
System.Вставить("weight", "1");
System.Вставить("text", "Сгенерируй обложку для онлайн-курса под названием "+ТемаКартинки);
messages.Добавить(System);
СтруктуруЗапроса = Новый Структура("modelUri, completionOptions, messages", modelUri, completionOptions, messages);
Возврат СтруктуруЗапроса;
КонецФункции
&НаКлиенте
Функция ПослатьЗапросАйДи(СтрокаДляТела) //получаем ID для генерации изображения
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTP = Новый HTTPСоединение("",,,,,,SSL); //lim я
ЗаголовокЗапросаHTTP = Новый Соответствие();
Токен=ПолучитьТокенНаСервере();
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer " + Токен);
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");
ЗапросHTTP = Новый HTTPЗапрос("foundationModels/v1/imageGenerationAsync", ЗаголовокЗапросаHTTP);
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаДляТела);
ОтветHTTP = HTTP.ОтправитьДляОбработки(ЗапросHTTP);
JSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат = РаботаСHTTP.ДесериализоватьJSON(JSON);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СобытияФормы
&НаКлиенте
Процедура Пуск(Команда)
АйДи=ПолучитьАйДиКартинки(Объект.Тема);
КартинкаВДвоичныхДанных="";
Пока КартинкаВДвоичныхДанных="" Цикл
Попытка
КартинкаВДвоичныхДанных=ПолучитьКартинку(Объект.Тема,АйДи);
Исключение
КонецПопытки;
КонецЦикла;
АдресКартинки=ПоместитьВоВременноеХранилище(КартинкаВДвоичныхДанных);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЭтоАдресВременногоХранилища(АдресКартинки) Тогда
ТекущийОбъект.Картинка=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресКартинки));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
АдресКартинки=ПолучитьНавигационнуюСсылку(Объект.Ссылка,"Картинка");
КоличествоВопросов = 1;
КонецПроцедуры
&НаСервере
Функция ПолучитьТокенНаСервере()
Возврат Константы.Токен.Получить();
КонецФункции
#КонецОбласти
#Область ЗаполнениеТеста
&НаКлиенте
Процедура ЗаполнитьВопросы(ТемаТеста) Экспорт
НовыйВопрос=Тест.Добавить();
Пока НовыйВопрос.Вопрос="" Цикл
Попытка
СтруктуруЗапроса = СформироватьСтруктуруЗапросаПреподавательВопрос(ТемаТеста);
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ПослатьЗапрос(СтрокаДляТела);
Если Результат.result.alternatives.Количество() > 0 Тогда
Вопрос= Результат.result.alternatives[0].message.text;
НовыйВопрос.Вопрос=Вопрос;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
Пока (НовыйВопрос.Ответ3="" ИЛИ СтрДлина(НовыйВопрос.Ответ3)>25) Цикл
Попытка
СтруктуруЗапроса = СформироватьСтруктуруЗапросаВерныйВариантОтвета(Вопрос);
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ПослатьЗапрос(СтрокаДляТела);
Если Результат.result.alternatives.Количество() > 0 Тогда
ВерныйОтвет= Результат.result.alternatives[0].message.text;
НовыйВопрос.Ответ3=ВерныйОтвет;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
Пока (НовыйВопрос.Ответ1="" ИЛИ СтрДлина(НовыйВопрос.Ответ1)>25) Или НовыйВопрос.Ответ1=НовыйВопрос.Ответ3 Цикл
Попытка
СтруктуруЗапроса = СформироватьСтруктуруЗапросаНеверныйВариантОтвета(Вопрос);
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ПослатьЗапрос(СтрокаДляТела);
Если Результат.result.alternatives.Количество() > 0 Тогда
НеверныйОтвет1= Результат.result.alternatives[0].message.text;
НовыйВопрос.Ответ1=НеверныйОтвет1;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
Пока (НовыйВопрос.Ответ2="" ИЛИ СтрДлина(НовыйВопрос.Ответ2)>25) Или (НовыйВопрос.Ответ2=НовыйВопрос.Ответ3 или НовыйВопрос.Ответ2=НовыйВопрос.Ответ1) Цикл
Попытка
СтруктуруЗапроса = СформироватьСтруктуруЗапросаНеверныйВариантОтвета(Вопрос);
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ПослатьЗапрос(СтрокаДляТела);
Если Результат.result.alternatives.Количество() > 0 Тогда
НеверныйОтвет2= Результат.result.alternatives[0].message.text;
НовыйВопрос.Ответ2=НеверныйОтвет2;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
Пока (НовыйВопрос.Ответ4="" ИЛИ СтрДлина(НовыйВопрос.Ответ4)>25) Или (НовыйВопрос.Ответ4=НовыйВопрос.Ответ3 или НовыйВопрос.Ответ4=НовыйВопрос.Ответ1 или НовыйВопрос.Ответ4=НовыйВопрос.Ответ2) Цикл
Попытка
СтруктуруЗапроса = СформироватьСтруктуруЗапросаНеверныйВариантОтвета(Вопрос);
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ПослатьЗапрос(СтрокаДляТела);
Если Результат.result.alternatives.Количество() > 0 Тогда
НеверныйОтвет3= Результат.result.alternatives[0].message.text;
НовыйВопрос.Ответ4=НеверныйОтвет3;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
НовыйВопрос.ПравильныйОтвет3=Истина;
КонецПроцедуры
&НаКлиенте
Функция ПослатьЗапрос(СтрокаДляТела)
// создаем новое HTTP соединение с указанием сервера
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTP = Новый HTTPСоединение("",,,,,,SSL); //лямка
//заголовок создадим в виде соответствия
ЗаголовокЗапросаHTTP = Новый Соответствие();
Токен = ПолучитьТокенНаСервере();
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer " + Токен);
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");
//создадим заголовок запроса
ЗапросHTTP = Новый HTTPЗапрос("foundationModels/v1/completion", ЗаголовокЗапросаHTTP);
//загрузить строку в тело
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаДляТела);
// Отправляем POST-запрос на обработку
ОтветHTTP = HTTP.ОтправитьДляОбработки(ЗапросHTTP);
JSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат = РаботаСHTTP.ДесериализоватьJSON(JSON);
Возврат Результат;
КонецФункции
&НаКлиенте
Функция СформироватьСтруктуруЗапросаПреподавательВопрос(НазваниеЗанятия)
// Структура запроса
// modelURI это КПТ://папка/якпт - лайт
completionOptions = Новый Структура();
completionOptions.Вставить("stream", Ложь);
completionOptions.Вставить("temperature", 0.9);
completionOptions.Вставить("maxTokens", 2000);
messages = Новый Массив;
System = Новый Структура;
System.Вставить("role", "system");
//ТЫ ПРЕПОД
User = Новый Структура;
User.Вставить("role", "user");
User.Вставить("text", "Название занятия: " + НазваниеЗанятия + ".");
messages.Добавить(System);
messages.Добавить(User);
СтруктуруЗапроса = Новый Структура("modelUri, completionOptions, messages", modelUri, completionOptions, messages);
Возврат СтруктуруЗапроса;
КонецФункции
&НаКлиенте
Функция СформироватьСтруктуруЗапросаВерныйВариантОтвета(Вопрос)
// Структура запроса
//modelURI это КПТ://папка/якпт - лайт
completionOptions = Новый Структура();
completionOptions.Вставить("stream", Ложь);
completionOptions.Вставить("temperature", 0.9);
completionOptions.Вставить("maxTokens", 2000);
messages = Новый Массив;
System = Новый Структура;
System.Вставить("role", "system");
// ты препод
User = Новый Структура;
User.Вставить("role", "user");
User.Вставить("text", "Вопрос: " + Вопрос + ".");
messages.Добавить(System);
messages.Добавить(User);
СтруктуруЗапроса = Новый Структура("modelUri, completionOptions, messages", modelUri, completionOptions, messages);
Возврат СтруктуруЗапроса;
КонецФункции
&НаКлиенте
Функция СформироватьСтруктуруЗапросаНеверныйВариантОтвета(Вопрос)
// Структура запроса
//кпт модель MODELURI
completionOptions = Новый Структура();
completionOptions.Вставить("stream", Ложь);
completionOptions.Вставить("temperature", 0.9);
completionOptions.Вставить("maxTokens", 2000);
messages = Новый Массив;
System = Новый Структура;
System.Вставить("role", "system");
//ты - неверный, студент
User = Новый Структура;
User.Вставить("role", "user");
//вопрос?????
messages.Добавить(System);
messages.Добавить(User);
СтруктуруЗапроса = Новый Структура("modelUri, completionOptions, messages", modelUri, completionOptions, messages);
Возврат СтруктуруЗапроса;
КонецФункции
&НаКлиенте
Процедура СгенерироватьТест(Команда)
Для Сч=1 По КоличествоВопросов Цикл
ЗаполнитьВопросы(Объект.Тема);
КонецЦикла;
КонецПроцедуры
ПоказатьС помощью почты получаю картинку
&НаКлиенте
Функция ПолучитьПрофиль()
// Создать почтовый профиль.
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПользовательSMTP = "***";
Профиль.ПарольSMTP = "***";
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
Профиль.АдресСервераPOP3 = "pop.yandex.ru";
Профиль.Пользователь = "***";
Профиль.Пароль = "***";
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.АдресСервераIMAP = "imap.yandex.ru";
Профиль.ПользовательIMAP = "***";
Профиль.ПарольIMAP = "***";
Профиль.ТолькоЗащищеннаяАутентификацияIMAP=Ложь;
Возврат Профиль;
КонецФункции
&НаКлиенте
Процедура ОтправитьПочту(Команда)
Перем HTML, Картинки;
Профиль = ПолучитьПрофиль();
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Тема = "Внимание! Скоро начнется курс";
Сообщение.Отправитель = "***@yandex.ru";
Сообщение.Получатели.Добавить(Получатель);
ТекстСообщения = Сообщение.Тексты.Добавить("эй, на курс запишись");
Почта = Новый ИнтернетПочта;
Сообщ = Новый СообщениеПользователю();
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Сообщение);
Исключение
Сообщ.Текст = "Ошибка при отправке файла: " ;
Сообщ.Сообщить();
Сообщ.Текст = ОписаниеОшибки();
Сообщ.Сообщить();
Возврат;
КонецПопытки;
Сообщ.Текст = "Сообщение отправлено. ";
Сообщ.Сообщить();
Почта.Отключиться();
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьПочту(Команда)
// Получить почтовый профиль.
Профиль = ПолучитьПрофиль();
Сообщ = Новый СообщениеПользователю();
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
Исключение
// Вывести сообщение об ошибке при подключении к серверу.
Сообщ.Текст = "Ошибка при подключении или приеме" + ОписаниеОшибки();
Сообщ.Сообщить();
Возврат;
КонецПопытки;
// Получить заголовки сообщений с отбором из почтового ящика.
ПараметрыОтбораIMAP = Новый Структура;
ПараметрыОтбораIMAP.Вставить("Прочитанные", Ложь);
ЗаголовкиСообщений = Почта.ПолучитьЗаголовки(ПараметрыОтбораIMAP);
КоличествоСообщений = ЗаголовкиСообщений.Количество();
Если КоличествоСообщений = 0 Тогда
Сообщ.Текст = "Сообщений в почтовом ящике нет.";
Сообщ.Сообщить();
Почта.Отключиться();
Возврат;
КонецЕсли;
ФлагиСообщенийIMAP = Новый Соответствие;
// Получить полностью сообщения.
МассивСообщений = Почта.Выбрать(Ложь,ЗаголовкиСообщений);
Для Индекс = 0 По КоличествоСообщений - 1 Цикл
ФлагСообщения = Новый ФлагиИнтернетПочтовогоСообщения();
ФлагСообщения.Прочитанное = Истина;
ФлагиСообщенийIMAP.Вставить(МассивСообщений[Индекс].Идентификатор[0], ФлагСообщения);
Сообщ.Текст = "Принято сообщение: " + МассивСообщений[Индекс].Тексты[0].Текст;
Сообщ.Сообщить();
КонецЦикла;
Почта.УстановитьФлагиСообщений(ФлагиСообщенийIMAP);
Почта.Отключиться();
КонецПроцедуры
&НаКлиенте
Процедура Пуск(Команда)
Описание=ПолучитьОписание(Название);
КонецПроцедуры
&НаКлиенте
Функция ПолучитьОписание(НазваниеКурса) Экспорт
СтруктуруЗапроса = СформироватьСтруктуруЗапроса(НазваниеКурса);
СтрокаДляТела = РаботаСHTTP.СериализоватьВJSON(СтруктуруЗапроса);
Результат = ОтправитьЗапросКЯндексКлауд(СтрокаДляТела);
Если Результат.result.alternatives.Количество() > 0 Тогда
Возврат Результат.result.alternatives[0].message.text;
КонецЕсли;
Возврат "";
КонецФункции
&НаКлиенте
Функция ОтправитьЗапросКЯндексКлауд(СтрокаДляТела)
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTP = Новый HTTPСоединение("",,,,,,SSL); //лим
ЗаголовокЗапросаHTTP = Новый Соответствие();
Токен = ПолучениеТокена();
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer " + Токен);
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");
ЗапросHTTP = Новый HTTPЗапрос("foundationModels/v1/completion", ЗаголовокЗапросаHTTP);
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаДляТела);
ОтветHTTP = HTTP.ОтправитьДляОбработки(ЗапросHTTP);
JSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат = РаботаСHTTP.ДесериализоватьJSON(JSON);
Возврат Результат;
КонецФункции
&НаКлиенте
Функция СформироватьСтруктуруЗапроса(НазваниеКурса)
modelUri = ""; //гпт и папка
completionOptions = Новый Структура();
completionOptions.Вставить("stream", Ложь);
completionOptions.Вставить("temperature", 0.9);
completionOptions.Вставить("maxTokens", 2000);
messages = Новый Массив;
System = Новый Структура;
System.Вставить("role", "system");
System.Вставить("text", ""); //описание напиши ты препод
User = Новый Структура;
User.Вставить("role", "user");
User.Вставить("text", "Название курса: " + НазваниеКурса + ".");
messages.Добавить(System);
messages.Добавить(User);
СтруктуруЗапроса = Новый Структура("modelUri, completionOptions, messages", modelUri, completionOptions, messages);
Возврат СтруктуруЗапроса;
КонецФункции
&НаСервере
Функция ПолучениеТокена()
Возврат Константы.Токен.Получить();
КонецФункции
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Размещение двоичных данных (обработок, документов, библиотек) в файле ERT
- Работа с двоичными данными на примере чтения файлов изображений. Новые возможности 8.3.9
- Читаем *.bmp напрямую в ТабДок двоичными данными
- Программное формирование картинки в 1С:Предприятие 8.3.9 (ПотокВПамяти / ЗаписьДанных)
- OpenStreetMap (OSM) в 1С - вывод карты, указание маркеров, построение маршрутов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Больно уж код большой - лень читать) Но вроде двоичные данные картинки можно в Base64 преобразовывать и, например, в html документе в теге img оно вполне себе пихается после этого (src='data:image/jpeg;base64, ....'), так что и отправляться, я думаю, должно
Заголоффки = Новый Соответствие;
Заголоффки["блабла"] = "блабла";
C = Новый ХТТПСоединение(блаблабла);
З = Новый ХттпЗапрос(Путь);
З.УстановитьТелоИзДвоичныхДанных(Новый ДвиичныеДанные(ИмяФайла)); // имя файла с картиносом
О = С.ОтпраитьДляОбработки(З, Заголоффки);
Если О.КодОтвета =- 200 Тогда
// ура, мы что-то там взать получили
Иначе
// не ура, ошибочка вышла
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот