Картинка из двоичных данных

1. stick_finger 23.06.24 21:51 Сейчас в теме
Как в данном коде заменить временное хранилище? Была попытка через Новый Картинка(<ДвоичныеДанные>), но почему-то не получается


#Область РаботаСКартинкой

&НаКлиенте
Процедура АдресКартинкиНажатие(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ОписаниеНажатиеЗавершение",ЭтотОбъект);
НачатьПомещениеФайла(Оповещение,,,Истина, УникальныйИдентификатор);
СтандартнаяОбработка=Ложь;

КонецПроцедуры


&НаКлиенте
Процедура ОписаниеНажатиеЗавершение(Результат, Адрес, ПомещаемыйФайл, ДополнительныеПараметры) Экспорт
Если не Результат Тогда
Возврат;
КонецЕсли;
АдресКартинки=Адрес;
Модифицированность=Истина;
КонецПроцедуры

&НаКлиенте
Функция ПолучитьКартинку(ТемаКартинки,АйДи) Экспорт

СтруктуруЗапроса = СформироватьСтруктуруЗапроса();
СтрокаДляТела = РаботаС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);
    
    Возврат СтруктуруЗапроса;
    
КонецФункции   
 
 
&НаСервере
Функция ПолучениеТокена()
    Возврат Константы.Токен.Получить();
КонецФункции
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. scarl1n 24.06.24 08:41 Сейчас в теме
Больно уж код большой - лень читать) Но вроде двоичные данные картинки можно в Base64 преобразовывать и, например, в html документе в теге img оно вполне себе пихается после этого (src='data:image/jpeg;base64, ....'), так что и отправляться, я думаю, должно
3. starik-2005 3088 24.06.24 10:46 Сейчас в теме
Заголоффки = Новый Соответствие;
Заголоффки["блабла"] = "блабла";
C = Новый ХТТПСоединение(блаблабла);
З = Новый ХттпЗапрос(Путь);
З.УстановитьТелоИзДвоичныхДанных(Новый ДвиичныеДанные(ИмяФайла)); // имя файла с картиносом
О = С.ОтпраитьДляОбработки(З, Заголоффки); 
Если О.КодОтвета =- 200 Тогда
  // ура, мы что-то там взать получили
Иначе
  // не ура, ошибочка вышла
КонецЕсли;
Показать
Оставьте свое сообщение

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