Каталог решений - Хранение изображения и редактирование HTML документа (8.3.19 управляемые формы)

Хранение изображения и редактирование HTML документа (8.3.19 управляемые формы)

Хранение изображения и редактирование HTML документа (8.3.19 управляемые формы)

В наличии

Стояла задача использовать Форматированный документ для хранения и редактирования HTML документа и при этом сохранять картинки для HTML без использования base64.

Категория:

Описание

На Инфостарте и в СЕТИ предлагают использовать base64 для хранения картинок в HTML документе. Это решение имеет ограничение на длину строки и при большом количестве картинок начинаются "тормоза" при сохранении и открытии веб документа.

Предлагается для редактора использовать Форматированный документ и хранить его в хранилище. При формирования HTML документа используется объект ПотокВПамяти, который позволяет сохранять картинки из форматированного документа в файл (ключевой момент) и по веб ссылке отображать картнку на веб форме.

Фрагмент кода: ИмяФайла (уникальное) = КлючЗначение.Ключ+"_"+Объект.Ссылка.УникальныйИдентификатор()+".jpg" позволяет ограничить количество временных файлов для открытых ссылок, т.е для  всех пользовательских сеансов используется один и тот временный файл для конкретной картинки и позволяет избежать "затирания" файлов картинки.

Код для понимания несложный, описывать, думаю, не нужно.

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
 ТекущийОбъект.НовостиВХранилище = Новый ХранилищеЗначения(ФорматДокумент);
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
 ФорматДокумент = ТекущийОбъект.НовостиВХранилище.Получить();
КонецПроцедуры

&НаКлиенте
Процедура УстановитьРежимРедактирования(Команда)  
    Если НЕ Элементы.ФорматДокумент.ТолькоПросмотр Тогда
        Элементы.ФорматДокумент.ТолькоПросмотр=Истина;
    Иначе
        Элементы.ФорматДокумент.ТолькоПросмотр=ложь;
    КонецЕсли;

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЗаполнитьХТМЛНаСервере( ) ; 
    Если НЕ РольДоступна("ПолныеПрава") Тогда 
        Отказ=Истина;
    КонецЕсли;  
    
КонецПроцедуры 

&НаСервере
Процедура ЗаполнитьХТМЛНаСервере( ) 
    HTML_String = "";
    СтруктураКартинок = Новый Структура;    
    ФорматДокумент.ПолучитьHTML(HTML_String, СтруктураКартинок);  
    КаталогКартинок=КаталогВременныхФайлов();
    
    Для каждого КлючЗначение из СтруктураКартинок Цикл 
        Стрим = Новый ПотокВПамяти;
        КлючЗначение.Значение.Записать(Стрим);
        Бинарник = Стрим.ЗакрытьИПолучитьДвоичныеДанные();  
        ИмяФайла = КлючЗначение.Ключ+"_"+Объект.Ссылка.УникальныйИдентификатор()+".jpg"; 
        
        Бинарник.Записать(КаталогКартинок+ИмяФайла);   
        HTML_String=СтрЗаменить(HTML_String,КлючЗначение.Ключ,"http://localhost/SL/PicturesTemp/"+ИмяФайла); 
    КонецЦикла; 

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

&НаКлиенте
Процедура HTML_StringПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    Если ДанныеСобытия.Свойство("href") И ЗначениеЗаполнено(ДанныеСобытия.href) Тогда
        ИмяОткрываемойСтраницы = СокрЛП(ДанныеСобытия.href);
        Протокол = ВРег(СтрЛевДоСимвола(ИмяОткрываемойСтраницы, ":"));
        Если Протокол <> "HTTP" И Протокол <> "HTTPS" И Протокол <> "E1C" Тогда
            Возврат; // Не ссылка
        КонецЕсли;
        
        ПерейтиПоСсылке(ИмяОткрываемойСтраницы);         
        СтандартнаяОбработка = Ложь;
    КонецЕсли;
КонецПроцедуры  

&НаКлиенте
Процедура ПерейтиПоСсылке(Ссылка) Экспорт
    
    #Если ТолстыйКлиентОбычноеПриложение Тогда
        ЗапуститьПриложение(Ссылка);
    #Иначе
        ПерейтиПоНавигационнойСсылке(Ссылка);
    #КонецЕсли
    
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция СтрЛевДоСимвола(Строка, Разделитель, Остаток = Неопределено)
    Позиция = СтрНайти(Строка, Разделитель);
    Если Позиция = 0 Тогда
        СтрокаДоТочки = Строка;
        Остаток = "";
    Иначе
        СтрокаДоТочки = Лев(Строка, Позиция - 1);
        Остаток = Сред(Строка, Позиция + СтрДлина(Разделитель));
    КонецЕсли;
    Возврат СтрокаДоТочки;
КонецФункции 

&НаКлиенте
Процедура GetHTML(Команда) 
    ЗаполнитьХТМЛНаСервере( );
КонецПроцедуры

 

has been added to your cart:
Оформление заказа