1С 8.3 Загрузка картинки с json
Данные > Примеры кода 1С > 1С 8.3 HTTP
Перейти в раздел примеры кода 1С 8.3:
Используются методы БСП:
Пример загрузки картинки номенклатуры в json в 1С 8.3:
&НаКлиенте
Процедура ФайлЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтрФильтр = "Файлы json (*.json) |*.json";
ЭтаФорма.ФайлЗагрузки = ВыбратьФайл(СтрФильтр, "Выберите *.json файл");
КонецПроцедуры
&НаКлиенте
Функция ВыбратьФайл(СтрФильтр = "", стрЗаголовок = "", стрКаталог = "", булМножественныйВыбор = Ложь, булПредварительныйПросмотр = Ложь, булПроверятьСуществованиеФайла = Ложь) Экспорт
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Фильтр = СтрФильтр;
ДиалогВыбора.Каталог = стрКаталог;
ДиалогВыбора.Заголовок = стрЗаголовок;
ДиалогВыбора.МножественныйВыбор = булМножественныйВыбор;
ДиалогВыбора.ПредварительныйПросмотр = булПредварительныйПросмотр;
ДиалогВыбора.ПроверятьСуществованиеФайла = булПроверятьСуществованиеФайла;
Если ДиалогВыбора.Выбрать() Тогда
Если булМножественныйВыбор Тогда
Возврат ДиалогВыбора.ВыбранныеФайлы;
Иначе
Возврат ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
СтрокиДвоичныхДанных = Новый ДвоичныеДанные(ЭтаФорма.ФайлЗагрузки);
ФайлДанных = Новый Файл(ЭтаФорма.ФайлЗагрузки);
АдресСтрокиДвоичныхДанных = ПоместитьВоВременноеХранилище(СтрокиДвоичныхДанных, УникальныйИдентификатор);
ПринятьНаСервереДокументы(АдресСтрокиДвоичныхДанных, ФайлДанных.Расширение);
КонецПроцедуры
&НаСервере
Процедура ПринятьНаСервереДокументы(АдресСтрокиДвоичныхДанных, РасширениеФайлаЭксель)
СерверныеОстатки = ПолучитьИзВременногоХранилища(АдресСтрокиДвоичныхДанных);
Если РасширениеФайлаЭксель = ".json" Тогда
ВременныйФайлОстатков = ПолучитьИмяВременногоФайла("json");
Иначе
Возврат;
КонецЕсли;
СерверныеОстатки.Записать(ВременныйФайлОстатков);
ЧтениеJSON = Новый ЧтениеJSON();
Попытка
ЧтениеJSON.ОткрытьФайл(ВременныйФайлОстатков);
Исключение
Сообщить("Невозможно открыть json-файл");
Возврат;
КонецПопытки;
Массив = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Для Каждого ЭлементМассива Из Массив Цикл
СформироватьЗаписьПоСтруктура(ЭлементМассива);
//Для Каждого Элемент Из ЭлементМассива Цикл
// Сообщить(СокрЛП(Элемент.Ключ));
// Сообщить(СокрЛП(Элемент.Значение));
//КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СформироватьЗаписьПоСтруктура(ЭлементМассива)
НовСсылка = ЭтаФорма.НоменклатураЗагрузки.ПолучитьОбъект();
ВременнаяКартинкаПеренос = ПолучитьИмяВременногоФайла("jpeg");
ОсновноеИзображение = Base64Значение(ЭлементМассива.ОсновноеИзображение);
АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ОсновноеИзображение);
ОбработатьПрикрепленныйФайлНоменклатуры(НовСсылка.Ссылка, АдресВременногоХранилищаФайла, "mainpix", "jpeg");
ОсновноеИзображение.Записать(ВременнаяКартинкаПеренос);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОбработатьПрикрепленныйФайлНоменклатуры(НовНоменкл, АдресФайлаВоВременномХранилище, ИмяБезРасширения, Расширение)
ОбъектНоменклатура = НовНоменкл.ПолучитьОбъект();
ФайлВбазе = НайтиПрисоединенныйФайлВБазе(НовНоменкл, ИмяБезРасширения, Расширение);
Если ЗначениеЗаполнено(ФайлВбазе) Тогда
ИнформацияОФайле = Новый Структура("АдресФайлаВоВременномХранилище, ДатаМодификацииУниверсальная, АдресВременногоХранилищаТекста", АдресФайлаВоВременномХранилище, ТекущаяУниверсальнаяДата(), Неопределено);
РаботаСФайлами.ОбновитьФайл(ФайлВбазе, ИнформацияОФайле);
ОбъектНоменклатура.ФайлКартинки = ФайлВбазе;
Иначе
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("Автор", ПараметрыСеанса.ТекущийПользователь);
ПараметрыФайла.Вставить("ВладелецФайлов", НовНоменкл);
ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения);
ПараметрыФайла.Вставить("РасширениеБезТочки", Расширение);
ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяУниверсальнаяДата());
ПрисоединенныйФайлСсылка = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайлаВоВременномХранилище);
ОбъектНоменклатура.ФайлКартинки = ПрисоединенныйФайлСсылка;
КонецЕсли;
ОбъектНоменклатура.Записать();
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиПрисоединенныйФайлВБазе(Номенклатура, ИмяБезРасширения, Расширение)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
|ГДЕ
| НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла
| И НоменклатураПрисоединенныеФайлы.Наименование ПОДОБНО &Наименование
| И НоменклатураПрисоединенныеФайлы.Расширение ПОДОБНО &Расширение
| И НЕ НоменклатураПрисоединенныеФайлы.ПометкаУдаления";
Запрос.УстановитьПараметр("ВладелецФайла", Номенклатура);
Запрос.УстановитьПараметр("Наименование", СокрЛП(ИмяБезРасширения));
Запрос.УстановитьПараметр("Расширение", СокрЛП(Расширение));
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат (Неопределено);
Иначе
Таб = Результат.Выгрузить();
Возврат (Таб[0].Ссылка);
КонецЕсли;
КонецФункции
Процедура ФайлЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтрФильтр = "Файлы json (*.json) |*.json";
ЭтаФорма.ФайлЗагрузки = ВыбратьФайл(СтрФильтр, "Выберите *.json файл");
КонецПроцедуры
&НаКлиенте
Функция ВыбратьФайл(СтрФильтр = "", стрЗаголовок = "", стрКаталог = "", булМножественныйВыбор = Ложь, булПредварительныйПросмотр = Ложь, булПроверятьСуществованиеФайла = Ложь) Экспорт
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Фильтр = СтрФильтр;
ДиалогВыбора.Каталог = стрКаталог;
ДиалогВыбора.Заголовок = стрЗаголовок;
ДиалогВыбора.МножественныйВыбор = булМножественныйВыбор;
ДиалогВыбора.ПредварительныйПросмотр = булПредварительныйПросмотр;
ДиалогВыбора.ПроверятьСуществованиеФайла = булПроверятьСуществованиеФайла;
Если ДиалогВыбора.Выбрать() Тогда
Если булМножественныйВыбор Тогда
Возврат ДиалогВыбора.ВыбранныеФайлы;
Иначе
Возврат ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
СтрокиДвоичныхДанных = Новый ДвоичныеДанные(ЭтаФорма.ФайлЗагрузки);
ФайлДанных = Новый Файл(ЭтаФорма.ФайлЗагрузки);
АдресСтрокиДвоичныхДанных = ПоместитьВоВременноеХранилище(СтрокиДвоичныхДанных, УникальныйИдентификатор);
ПринятьНаСервереДокументы(АдресСтрокиДвоичныхДанных, ФайлДанных.Расширение);
КонецПроцедуры
&НаСервере
Процедура ПринятьНаСервереДокументы(АдресСтрокиДвоичныхДанных, РасширениеФайлаЭксель)
СерверныеОстатки = ПолучитьИзВременногоХранилища(АдресСтрокиДвоичныхДанных);
Если РасширениеФайлаЭксель = ".json" Тогда
ВременныйФайлОстатков = ПолучитьИмяВременногоФайла("json");
Иначе
Возврат;
КонецЕсли;
СерверныеОстатки.Записать(ВременныйФайлОстатков);
ЧтениеJSON = Новый ЧтениеJSON();
Попытка
ЧтениеJSON.ОткрытьФайл(ВременныйФайлОстатков);
Исключение
Сообщить("Невозможно открыть json-файл");
Возврат;
КонецПопытки;
Массив = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Для Каждого ЭлементМассива Из Массив Цикл
СформироватьЗаписьПоСтруктура(ЭлементМассива);
//Для Каждого Элемент Из ЭлементМассива Цикл
// Сообщить(СокрЛП(Элемент.Ключ));
// Сообщить(СокрЛП(Элемент.Значение));
//КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СформироватьЗаписьПоСтруктура(ЭлементМассива)
НовСсылка = ЭтаФорма.НоменклатураЗагрузки.ПолучитьОбъект();
ВременнаяКартинкаПеренос = ПолучитьИмяВременногоФайла("jpeg");
ОсновноеИзображение = Base64Значение(ЭлементМассива.ОсновноеИзображение);
АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ОсновноеИзображение);
ОбработатьПрикрепленныйФайлНоменклатуры(НовСсылка.Ссылка, АдресВременногоХранилищаФайла, "mainpix", "jpeg");
ОсновноеИзображение.Записать(ВременнаяКартинкаПеренос);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОбработатьПрикрепленныйФайлНоменклатуры(НовНоменкл, АдресФайлаВоВременномХранилище, ИмяБезРасширения, Расширение)
ОбъектНоменклатура = НовНоменкл.ПолучитьОбъект();
ФайлВбазе = НайтиПрисоединенныйФайлВБазе(НовНоменкл, ИмяБезРасширения, Расширение);
Если ЗначениеЗаполнено(ФайлВбазе) Тогда
ИнформацияОФайле = Новый Структура("АдресФайлаВоВременномХранилище, ДатаМодификацииУниверсальная, АдресВременногоХранилищаТекста", АдресФайлаВоВременномХранилище, ТекущаяУниверсальнаяДата(), Неопределено);
РаботаСФайлами.ОбновитьФайл(ФайлВбазе, ИнформацияОФайле);
ОбъектНоменклатура.ФайлКартинки = ФайлВбазе;
Иначе
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("Автор", ПараметрыСеанса.ТекущийПользователь);
ПараметрыФайла.Вставить("ВладелецФайлов", НовНоменкл);
ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения);
ПараметрыФайла.Вставить("РасширениеБезТочки", Расширение);
ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяУниверсальнаяДата());
ПрисоединенныйФайлСсылка = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайлаВоВременномХранилище);
ОбъектНоменклатура.ФайлКартинки = ПрисоединенныйФайлСсылка;
КонецЕсли;
ОбъектНоменклатура.Записать();
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиПрисоединенныйФайлВБазе(Номенклатура, ИмяБезРасширения, Расширение)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
|ГДЕ
| НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла
| И НоменклатураПрисоединенныеФайлы.Наименование ПОДОБНО &Наименование
| И НоменклатураПрисоединенныеФайлы.Расширение ПОДОБНО &Расширение
| И НЕ НоменклатураПрисоединенныеФайлы.ПометкаУдаления";
Запрос.УстановитьПараметр("ВладелецФайла", Номенклатура);
Запрос.УстановитьПараметр("Наименование", СокрЛП(ИмяБезРасширения));
Запрос.УстановитьПараметр("Расширение", СокрЛП(Расширение));
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат (Неопределено);
Иначе
Таб = Результат.Выгрузить();
Возврат (Таб[0].Ссылка);
КонецЕсли;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник